VBAの「Sendkeys」についての質問です。
未読分:3件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#3 2014年9月11日(木)22時08分 From: 柳原会長 | 返事 削除 変更 |
対処法ありがとうございます。 ナムロックが外れるのはwindowsのバグだったんですね。 いただいたソースでうまく動作しました。 |
Message#2 2014年9月9日(火)08時02分 From: 管理人 | 返事 削除 変更 |
「SendKeysステートメント」にはNumLockキーがオフになるバグが存在します。 そちらを回避するために、Sendkeysを利用した場合は、NumLockキーをオンにする処理を入れます。 以下が処理内容ですので、ご確認ください。 Sub sample() 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IEを表示する objIE.Visible = True '指定したURLのページを表示する objIE.Navigate "サイトURL" '完全にページが表示されるまで待機する Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Do Until objIE.document.ReadyState = "complete" DoEvents Loop SendKeys "123" '「NumLock」キーをON Call numLockOn End Sub 【NumLockオンサブルーチン】 Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Declare Function GetKeyboardState Lib "user32" _ (pbKeyState As Byte) As Long Const VK_NUMLOCK = &H90 '「NumLock」キー Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す Const KEYEVENTF_KEYUP = &H2 'キーを放す sub numLockOn() Dim NumLockState As Boolean Dim keys(0 To 255) As Byte GetKeyboardState keys(0) NumLockState = keys(VK_NUMLOCK) '「NumLock」キーがオフの場合はオンにする。 If NumLockState <> True Then 'キーを押す keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0 'キーを放す keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0 End If End sub NumLockキーをオンにするためにWindowsAPIの「keybd_event」を利用しています。 内容は基本形だと思ってご利用ください。 【参考サイト】 http://www.vba-ie.net/collection/iebasic2.html |
Message#1 2014年9月8日(月)23時48分 From: 柳原会長 | 返事 削除 変更 |
VBAの「Sendkeys」についての質問です。 VBAでIE操作する際に小窓画面のOKボタンをクリックするのにSendkeysを利用しています。 クリック自体は試行錯誤しながらうまく言ったのですが、その後キーボードで入力していくとおかしなことに気づきました。 いつも入力しているキーでなかったので、色々と調べてみるとニューメリックロックキーのランプが消えていてOFF状態になっています。 最初は間違ってオフにしてしまったんだろうと思っていたのですが、どうもSendkeys処理でなっているとわかりました。 こちらを常にOFFにする方法はあるでしょうか? ありましたら教えてください。 よろしくお願いします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降