|
こんばんは。
私も仕事では、殆どSendkeysは使いません。
>InputBoxの前に実行しているのにActiveWindowではなく後に表示されるInputBoxの位置が対象になるというのはどういう理屈なのでしょうか?
Sendkeysが直ちに実行される命令ではないからでしょうねえ!!
試しに以下のコード、実行する前に想像してください。
セルA1は、結果どうなると思いますか?
あまがえるさんは、123が表示される という理屈ですよね?
実行してみてください。
Sub test1()
Range("a1").Select
SendKeys "abc{ENTER}"
Range("a1").value = 123
End Sub
abcが入っていませんか?
APIが嫌なら、ユーザーフォームにRefeditコントロールを貼り付けて
自作してしまう方法は、どうでしょうか?
新規ブックにて試してみてください。
ユーザーフォームを一つ作成してください(UserForm1)。
このUserForm1には、Refeditコントロールだけを配置してください(RefEdit1)。
詳細は、
www.excel-vba.net/excel-userform-016.html
この辺りを参考にしてください。
UserForm1のモジュールに
'=============================================================
Option Explicit
Public value As Variant
Private Sub RefEdit1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
If KeyCode = 13 Then
value = RefEdit1.value
RefEdit1.Visible = False
Me.Hide
End If
End Sub
Private Sub UserForm_Activate()
With Me
.Left = 40000
.Top = 40000
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = True
End If
End Sub
標準モジュールに
'==================================================================
Sub test()
Dim add As String
With UserForm1
.Show
add = .value
End With
Unload UserForm1
On Error Resume Next
With Application
add = .ConvertFormula(add, xlR1C1, xlA1)
.Goto .Range(add)
End With
On Error GoTo 0
End Sub
これでtestを実行してみてください。
セル範囲の指定が可能になります。指定したセル範囲は、破線で囲まれます。
エンターキーで確定され、指定範囲が選択されます。
リンク先にもありますが、RefEditには、バグがあります。
ここを参考にバグを避けて使ったつもりです。
www.h3.dion.ne.jp/~sakatsu/Excel_Tips08.htm#S7
Excel2002で簡単なテストでは作動しています。
2010で試してみてください。
|
|