[[20210316144801]] 『sendkeysをその後の処理が追い越してしまう。』(モカ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『sendkeysをその後の処理が追い越してしまう。』(モカ)

下部抜粋
Application.SendKeys ("^(;)~")
ActiveWorkbook.SaveAs Filename:=fpath
Call numlock_onoff 'NumLockが解除されるバグ?の回避
End Sub

TODAY関数だとファイルを開くたびに日付が更新されてしまう為
ファイルを保存する前に SendkeysでCtrl+;エンターを押したことにし、
今日の日付を入れて保存したいのですが、その後の処理が追い越し、保存後の入力扱いになり、閉じる際に再度保存が必要になります。

リファレンスサイトにsendkeysの構文として
expression.SendKeys(Keys, Wait)
WaitにTrueを指定すると、送られたキーが処理されてから、マクロに制御が戻ります。と記載があったので下記も試しましたが、その後の処理が先になります。

Application.SendKeys ("^(;)~"),True

実行を一時停止させる?下記も試しましたが
Application.Wait Now + TimeValue("00:00:02")
'SaveAs' メソッドは失敗しました: '_Worksheet' オブジェクト」
上記のようなエラーが出るようになりうまくいきません。

sendkeyが実行されてから保存するにはどのような記述にすればよいでしょうか。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


SendKeysという動作不安定なものは避けて
    Range("A1") = Date
とかすればよろしいのでは?
(γ) 2021/03/16(火) 15:17

これで上手くいきませんか。キーバッファからの書き出しのタイミングが問題のようです。

Application.SendKeys ("^(;)~")
DoEvents
ActiveWorkbook.SaveAs Filename:=fpath
Call numlock_onoff
End Sub
(yu) 2021/03/16(火) 15:58


この例での私のお薦めは既に書きましたが、
SendKeysの一般論で言えば、既に指摘頂いた方法(DoEvants)に加え、
「第二引数(Wait引数)にTrueをセットする」のも有効ではないでしょうか。
これは、相手がExcel自体ですから多分有効です。(同期処理が取られるはずです。)
 
(なお、余談ですが、
 SendKeysの使用場面として、他のアプリケーションにキー操作を送信する場合があります。
 この場合は相手のアプリが処理終了の結果を返してくれる保証はないので、
 この手法は余り効果がないことになります。
 この場合は、物理的に、Sleep命令を入れてこちらの処理を遅延させるしかありません。)
 
 なお、Application.SendKeys ("^(;)~")はApplication.SendKeys ("^;~")で良いのでは?
(γ) 2021/03/16(火) 19:19

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.