アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAの以下プログラムがあります。

Dim DblID As Double '変数DblIDを定義

DblID = Shell("notepad.exe", vbNormalFocus) '元のサイズと位置でメモ帳を起動する

Range("A1").CurrentRegion.Copy '空白のセルで囲まれた範囲をコピーする
AppActivate DblID 'メモ帳をアクティブにする
SendKeys "^v", True 'コピーしたセルをメモ帳に貼り付ける
SendKeys "%fa", True '名前を付けて保存のダイアログ画面を表示する
Call Sleep(1000) '1秒だけ処理を休止する
SendKeys ThisWorkbook.Path & "\Memo.txt", True 'ファイル名をフルパスで指定する
SendKeys "%s" 'ファイルを保存する

引用元:
<< http://www.excel-vba.net/excel-function-018.html >>

> SendKeys ThisWorkbook.Path & "\Memo.txt", True
この部分ですが、名前を付けて保存のダイアログ画面のファイル名の欄に
フルパスを入力していますが、パスが一部欠けて入力されてしまうため、
エラーとなってしまいます。
ちゃんと入力されて保存まで完了することもあります。

毎回正常に動作させるためには、どのように工夫すればよろしいのでしょうか?
ご教授いただけると幸いです。

A 回答 (1件)


SendKeys "%fa", True '名前を付けて保存のダイアログ画面を表示する
Call Sleep(500) '0.5秒だけ処理を休止する
SendKeys ThisWorkbook.Path & "\Memo.txt", True 'ファイル名をフルパスで指定する
Call Sleep(500) '0.5秒だけ処理を休止する
SendKeys "%s" 'ファイルを保存する

こうっすかね。バッファかな?メモリかな?ってところですが正確には原因は特定できませんでした。

自身で1秒処理を止めている辺り気付いているんでしょうけど、一番のボトルネックになっているのは視覚効果かと推測。
ttp://www.yakushima-tonbo.com/windows/Windows7/Windows7_reiryo_2.htm
Windows8や10は知らんですが、似たようなオプションがあるので切るという手を試してみてください。


上記よりもうちょい確実に、と考えるなら数回に分けるのが無難かと思います。
・SendKeysで半角スペースをファイル名欄に送る、またはDELかBSを送ってデフォルトの「*.txt」を消させる
・SendKeysで本来のパスを送る
(フルパスの先頭が空白だったら無視されるのでそのまま保存できる)
これだと1回目のSendKeysでコケても問題は出ないと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています