VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法
VBS(WSH)でSendKeysを使って日本語(2バイト文字)を入力する方法
scriptが良い感じに組みあがってきた時に発生したエラー。
『保存フォルダがありません』
実験でネットワークドライブに保存しようとしたんです。
場所は[ \\Landisk\disk1\共有File\Test ] 何度か確かめた所、指示している場所はココなのに[ \\Landisk\disk1\MFile\Test ] に保存しようとしてます。
そりゃね、そんなフォルダないからエラーになるのは分かる。
でも、なんで?
どこからMFileなんて名前が出てきた??
文字化けならもっと難解な文字になっていてもよさそうなのにMFileって。
まず先に解決策を記載
■IEでDLデータに対して名前を付けて保存を実行
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" )
これが書き込んだ値をコピーして所定の位置に張り付けているパーツです。
ちなみに、下の様に書くと改行を無視して文字れ戸をコピペするようです。
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で保存しときましょう。
まとめ
これでネットワークフォルダへの保存もバッチリ。
まさかコマンドプロント使ってコピペなんて芸当で解決しなきゃならないとは思いもしませんでしたが...。


