VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法
VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法
scriptが良い感じに組みあがってきた時に発生したエラー。
『保存フォルダがありません』
実験でネットワークドライブに保存しようとしたんです。
場所は[ \\Landisk\disk1\共有File\Test ] 何度か確かめた所、指示している場所はココなのに[ \\Landisk\disk1\MFile\Test ] に保存しようとしてます。
そりゃね、そんなフォルダないからエラーになるのは分かる。
でも、なんで?
どこからMFileなんて名前が出てきた??
文字化けならもっと難解な文字になっていてもよさそうなのにMFileって。
まず先に解決策を記載
■IEでDLデータに対して名前を付けて保存を実行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
private function saveFile(filName,dirName) Dim i Dim onjShell Dim textClip Set textClip = CreateObject("WScript.Shell") WScript.Sleep 3000 textClip.Run "cmd.exe /c Echo "&dirName&" | Clip", 0, True '保存操作エミュレート Set onjShell = WScript.CreateObject ("WScript.Shell") 'フォーカス移動 onjShell.SendKeys( "{F6}" ) WScript.Sleep 300 onjShell.SendKeys( "{TAB}" ) WScript.Sleep 300 onjShell.SendKeys( "{DOWN}" ) WScript.Sleep 300 onjShell.SendKeys( "A" ) WScript.Sleep 1000 onjShell.SendKeys(filName) WScript.Sleep 300 'Tab反応ズレ防止策 For i=1 To 5 onjShell.SendKeys( "{TAB}" ) WScript.Sleep 100 Next '最上位フォルダに移動 onjShell.SendKeys("{ENTER 10}") WScript.Sleep 300 '保存作業 onjShell.SendKeys( "{TAB 1}" ) WScript.Sleep 300 onjShell.SendKeys( "{ENTER 1}" ) WScript.Sleep 1000 textClip.SendKeys( "^v" ) '↓だとMFileになる 'onjShell.SendKeys(dirName) WScript.Sleep 300 onjShell.SendKeys( "{ENTER 1}" ) WScript.Sleep 300 onjShell.SendKeys( "%s" ) WScript.Sleep 300 Set i = Nothing Set onjShell = Nothing Set textClip = Nothing End Function |
呼び出し時に2つの引数(filName、dirName)を渡しています。
共にCSVデータから呼び出して取り出した値で、CSVデータはASIN(Shift_Jis)で保存しています。
SendKeysで送る前は日本語もちゃんとしている
SendKeysで送る前にMsgBox(dirName)で確認すると正しい保存先が出力されるので、保存文字コードの問題ではなさそうです。
つまりは、SendKeysに掛けると化けると。
解決策の解説
一度他のプログラムに書き込んで、それをクリップ ⇒ 貼付け で課題解決できるようです。
なんだその面倒な仕様は…。
上のスクリプトの場合は一度コマンドプロントに書き出して、入力した値をコピー、必要な個所で呼び出してます。
WScript.Sleep 3000
textClip.Run “cmd.exe /c Echo “&dirName&” | Clip”, 0, True
ココがコマンドプロントに書き込んでる箇所で
textClip.SendKeys( “^v” )
これが書き込んだ値をコピーして所定の位置に張り付けているパーツです。
ちなみに、下の様に書くと改行を無視して文字れ戸をコピペするようです。
1 |
textClip.Run( "cmd.exe /c set /p dummy="格納したい文字列" | clip", 0, true ) |
その他の注意点
VBSではUTF-16またはShift_Jisのみが対応エンコードとなります。
CSVファイルのコードを UTF-8 にすると読込んだ時点で文字化けしてるので、SendKeys以前の問題でうまく動きません。
VBS利用者ならCSV作成はExcelで行うでしょうから、ココは素直にShift_Jisで保存しときましょう。
まとめ
これでネットワークフォルダへの保存もバッチリ。
まさかコマンドプロント使ってコピペなんて芸当で解決しなきゃならないとは思いもしませんでしたが…。
-
前の記事
VBS(WSH)でウィンドのアクティブ化が失敗する原因と解決策 2020.09.04
-
次の記事
キーワード自動挿入機能を運用して1年。今見えてきている課題 2020.09.07
コメントを残す