VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法

VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法

VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法

scriptが良い感じに組みあがってきた時に発生したエラー。
『保存フォルダがありません』

実験でネットワークドライブに保存しようとしたんです。

場所は[ \\Landisk\disk1\共有File\Test ] 何度か確かめた所、指示している場所はココなのに[ \\Landisk\disk1\MFile\Test ] に保存しようとしてます。

そりゃね、そんなフォルダないからエラーになるのは分かる。
でも、なんで?
どこからMFileなんて名前が出てきた??
文字化けならもっと難解な文字になっていてもよさそうなのにMFileって。

まず先に解決策を記載

■IEでDLデータに対して名前を付けて保存を実行

呼び出し時に2つの引数(filName、dirName)を渡しています。
共にCSVデータから呼び出して取り出した値で、CSVデータはASIN(Shift_Jis)で保存しています。

SendKeysで送る前は日本語もちゃんとしている

SendKeysで送る前にMsgBox(dirName)で確認すると正しい保存先が出力されるので、保存文字コードの問題ではなさそうです。

つまりは、SendKeysに掛けると化けると。

解決策の解説

一度他のプログラムに書き込んで、それをクリップ ⇒ 貼付け で課題解決できるようです。
なんだその面倒な仕様は…。

上のスクリプトの場合は一度コマンドプロントに書き出して、入力した値をコピー、必要な個所で呼び出してます。

Set textClip = CreateObject(“WScript.Shell”)
WScript.Sleep 3000
textClip.Run “cmd.exe /c Echo “&dirName&” | Clip”, 0, True

ココがコマンドプロントに書き込んでる箇所で

textClip.SendKeys( “^v” )

これが書き込んだ値をコピーして所定の位置に張り付けているパーツです。

ちなみに、下の様に書くと改行を無視して文字れ戸をコピペするようです。

その他の注意点

VBSではUTF-16またはShift_Jisのみが対応エンコードとなります。
CSVファイルのコードを UTF-8 にすると読込んだ時点で文字化けしてるので、SendKeys以前の問題でうまく動きません。

VBS利用者ならCSV作成はExcelで行うでしょうから、ココは素直にShift_Jisで保存しときましょう。

まとめ

これでネットワークフォルダへの保存もバッチリ。

まさかコマンドプロント使ってコピペなんて芸当で解決しなきゃならないとは思いもしませんでしたが…。