質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

2575閲覧

VBA実行後に、KEYBOARDを受け付けなくなる問題について

YAMAGUCCI_1962

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/05/30 03:00

編集2021/05/30 05:05

keybd_eventやSendKeysを使用したMACROを実行後に、KEYBOARDを受け付けなくなり、動作がおかしくなります。
「Alt」KEYを押すと正常に戻ります。
MACROの最後で、keybd_eventやSendKeysにて「Alt」を送っても復活しません。
MACROの記述で復活する方法について、ご教示をお願いします。

EXECLは2013です。

VBA
コード
Sub CubePDFPage()
Dim rc As Long
Dim TXT_PATH As String '開くフォルダ名
Dim Filename As String
' MASTERのセル「F6」の値を取得
TXT_PATH = Worksheets("MASTER").Range("F6").Value
TXT_PATH = Worksheets(1).Range("F6").Value
'TXT_PATH = "\・・・・"
Shell "C:\Windows\Explorer.exe " & TXT_PATH, vbNormalFocus 'フォルダを開く"
Application.Wait Now + TimeSerial(0, 0, 2)
SendKeys "^a"
SendKeys "%ec"
Application.Wait Now + TimeSerial(0, 0, 2)
Application.Wait Now + TimeSerial(0, 0, 2)
Call FileOpen_Shell(TXT_PATH) 'フォルダを開く"
Application.Wait Now + TimeSerial(0, 0, 30)
SendKeys "^M"
Application.Wait Now + TimeSerial(0, 0, 5)
'MASTERのセル「F28」の値を取得
Filename = Worksheets("MASTER").Range("F28").Value
Filename = Worksheets(1).Range("F28").Value
Filename = Filename + "\しおりなし"
SendKeys Filename
Application.Wait Now + TimeSerial(0, 0, 2)
'Call keybd_event(&H5B, 0, 0, 0) 'Windowsキーを押す
Call keybd_event(18, 0, 0, 0) 'Altキーを押す
Call keybd_event(83, 0, 0, 0) 'sキーを押す
Application.Wait Now + TimeSerial(0, 0, 2)
Call keybd_event(18, 0, 0, 0) 'Altキーを押す
Call keybd_event(89, 0, 0, 0) 'Yキーを押す
Application.Wait Now + TimeSerial(0, 0, 20)
Call keybd_event(89, 0, 0, 0) 'Yキーを押す
Application.Wait Now + TimeSerial(0, 0, 4)
Call keybd_event(18, 0, 0, 0) 'Altキーを押す
Call keybd_event(115, 0, 0, 0) 'F4キーを押す
Application.Wait Now + TimeSerial(0, 0, 2)
For i = 0 To 10
Application.Wait Now + TimeSerial(0, 0, 0.1)
Call keybd_event(18, 0, 0, 0) 'Altキーを押す
Application.Wait Now + TimeSerial(0, 0, 0.1)
SendKeys "%" 'Altキーを押す
Next i

End Sub
Sub FileOpen_Shell(ByVal strFile As String)
Dim strExe As String
strExe = "C:\Program Files\CubePDF Page\CubePdfPage.exe"
Shell strExe & " " & strFile, vbNormalFocus
End Sub

Public Sub Sample2()
keybd_event VK_LWIN, 0, 0, 0
keybd_event vbKeyM, 0, 0, 0
keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0
keybd_event vbKeyM, 0, KEYEVENTF_KEYUP, 0
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/05/30 03:01

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

AppActivateステートメント等を使用して、アクティブウィンドウを明確にした方が良いのではないでしょうか。

以下参考
第121回.SendKeysメソッドとAppActivateステートメント

投稿2021/05/30 05:06

sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAMAGUCCI_1962

2021/06/03 14:30

アクティブウィンドウに関するご教示、ありがとうございました。 AppActivateステートメントも試してみましたが、状況は変わりませんでしたので、keybd_eventを見直したところ、単純にKEY UPをしていないことが原因でした。 CODINGの不慣れによるもので、失礼しました。 下記のように、KEYをUPするコマンドを挿入して、VBA完了後も正常に動作するようになりました。 Call keybd_event(18, 0, 2, 0) 'AltキーをUPする
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問