|
UO3さま、grokさま、ichinoseさま
お礼がたいへん遅れて申し訳ありませんでした。
Sendkeysの実行がコードの記述順どおりになされるわけではないこと、しかもOSやExcelのバージョンによってその結果に違いが出ること、APIを使って目的の機能を実現できる方法があること、よくわかりました。
また、Sendkeysは私のところでもNumlockが解除されます。
これらは、大変勉強になりました。ありがとうございます。
ichinoseさまにご教示いただいたUserFormを使う方法でとりあえず目的のシステムを改良しようと考えています。RefEditコントロールのバグの問題どころかその存在すら知りませんでしたが、とても良い方法を教えていただいたと思います。
選択データが存在するシートでカーソルを動かさないときに備えて、デフォルト値としてRefEdit1.valueにアクティブセルのアドレスを下記のごとく書き込む形にしてみるつもりです。
Private Sub UserForm_Activate()
RefEdit1.value = Selection.Address
With Me
.Left = 40000
.Top = 40000
End With
End Sub
********************************************************
また、もはや蛇足に近いとも思いますが、ichinoseさまの下記プロシージャについての私の2つの環境での結果をお伝えさせていただきます。
Sub test1()
Range("a1").Select
SendKeys "abc{ENTER}"
Range("a1").value = 123
End Sub
→ XL2003 on XPHomeEditionSP3 :abc
XL2010 on Win7HP :abc
Sub test10()
Dim g0 As Long
Range("a1").Select
SendKeys "abc{ENTER}"
For g0 = 1 To 1000
Range("a1").value = Range("a1").value + 1
Next
End Sub
→ XL2003 on XPHomeEditionSP3 :カウントののちabc
XL2010 on Win7HP :カウントののちabc
Sub test2()
With Range("a1")
.value = ""
.Select
Application.SendKeys "abc{ENTER}"
.value = 123
End With
End Sub
→ XL2003 on XPHomeEditionSP3 :123
XL2010 on Win7HP :abc
※なぜか上記XL2003のみ「123」になります。ただし、何回か繰り返すと極くたまに、ですが「abc」になります。水もの・・・ですね(^^)
Sub test3()
With Range("a1")
.value = ""
.Select
With CreateObject("WScript.Shell")
AppActivate Application.Caption
.SendKeys "abc{ENTER}"
End With
.value = 123
End With
End Sub
→ XL2003 on XPHomeEditionSP3 :abc
XL2010 on Win7HP :abc
|
|