• ベストアンサー

WSHで自動化ソフトを作りたいけど、エクセルとの連携、エラー防止はどうすれば?

SHIMAPEEの回答

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.4

回答番号 No.3のお礼へのアドバイスです。 一括でexportできないのは残念ですね…。 Comma seperated Value structured text Tabular text でも文字化けですか。注目の箇所(「発表日」と発表される日時)だけでも見えれば何とかなりそうに思うのですが…。 一括がどうしてもできないのでしたら、2ステップで考えたらどうでしょう。 (1)一通一通exportでASCII text化することを自動化する。 (2)そのtextファイル群を入力としてExcelに書き出すことを自動化する。 一通一通メールを開いて検索するよりは、一通一通exportでASCII text化する方がSendKeysが少なくて済むのではないかと想像しています。ASCII textなら注目の箇所は見えますよね。 ----- 『1、2、エクセルを操作するためのコマンドということは、たとえばそのコマンドからLotusや、メモ帳などを操作できないので、他のプラグラムが割り込んでも、操作ができないので、エラーとして処理が中止されるという理解でよろしいでしょうか?』 書かれた文には誤解があると思います。 回答No.2に書いたスクリプトは、WSHからExcelの機能を使った、いわば独立したプログラムになります。このプログラムの実行中は、他のプログラムが動作しようが、キーやマウスを操作しようが、エラーとして処理が中止されることはありません。Excelの保存まで自動化すれば、Excelの画面を全く表示せずバックグラウンドで動かすこともできます。 『Lotusや、メモ帳などを操作できない』のではなく『Lotusや、メモ帳などがActiveになっても影響を受けずに実行できる』のです。 一方SendKeysは、実行されたときにActiveなプログラムに文字を送りつける機能でしかありません。ですからスクリプトの実行中に意図しないプログラムが動作してActiveになると、誤って文字を送ってしまいます(誤動作)。また、本来意図したプログラムの操作が行われないことになります(これも誤動作)。

choco0213
質問者

お礼

一括exportを使って処理を行うのは、恐らく不可能だと思います。 Lotusに詳しい同僚に聞いてもそれは不可能だといっていました。 その人は同じ同じようなことをしようとして挫折したそうです。。 ステップとして考えられるものは、 前提:Lotusと、業務のメールソフトは開いておき、業務のメールソフトをActivateさせておく。 1、sendkeyでAlt 2、sendkeyでF ツールバーのfile 3、sendkeyでe fileのexportを選択 4、sendkeyでenter exportを決定 5、sendkeyでファイル名を入力 6、sendkeyでtab 拡張子選択のボックスを選択(同時に半角入力なので変換が必要ないため、ファイル名が決定される) 7、sendkeyでM Microsoft RTFを選択 8、sendkeyでenter Microsoft RTFを決定。 この場合は、ASCIIを選ぶよりも手順がひとつ少ないので、こちらを選択しようと思っています。またMS RTFはテーブルも表示されます。今のところ、ちなみにMS WordはViewrしか使えない人もいるのですが、Viewerでも問題ないでしょうか? ASCIIでは、ファイル名を入力し、ASCIIを選択した後、新しい小さなウィンドウがチェックボックスが下記のようになっています。 ●Default ○international UTF-8 ○Unicode InternationalとUnicodeでは、文字化けをせずにメモ帳でもMSwordでも開けます。しかし、Lotus SymphonyのWordでは開けません。またテーブルは削除されています。ちなみに、DefaultはD、InternationalはI、UnicodeはUが、ショートカットとして、設定されています。 困難な点 1、ファイル名入力 (複数のファイルを連続でexportする場合、loopなどをつかって、毎回違うファイル名を入力する方法はありますか?) 2、sendkeyの脆弱性 (sendkeyとsendkeyの間に、もし違うプログラムが割り込んだら、また処理されるべきプログラムをactivateするようなことはできないでしょうか?たとえば、activateされているwindowの名前を毎回読み込んで、Ifを使って、それが処理されるべきファイルと違ったら、elseを使って・・・など。) 詳しい説明ありがとうございます。

関連するQ&A

  • VBSのsendkeysで日本語を出力したいです

    WshShell.Run "explorer" WScript.Sleep 100 WshShell.AppActivate "explorer" WScript.Sleep 100 WshShell.SendKeys "C:\Users\Default\" WScript.Sleep 100 WshShell.SendKeys "デスクトップ" WScript.Sleep 100 WshShell.SendKeys "{ENTER}" WScript.Sleep 100 *.VBS ファイルに書き込んで、直接実行したいのですが、エラーになります。 どんなコマンドを足すといいのですか?

  • デフラグのスケジュールによる自動化

    デフラグをタスクから自動化する為にJSで下記の様に設定したのですが最適化のボタンをクリックしてくれないので困っています。誰か教えて下さい。 var WShell = WScript.CreateObject("WScript.Shell"); WShell.Run("%SystemRoot%\\system32\\dfrg.msc"); WShell.AppActivate("ディスク デフラグ ツール"); WScript.Sleep(2000); WShell.Sendkeys("{TAB}{TAB}{TAB} ");   上記のまま設定すると分析のボタンをクリック後 終了するだけです。

  • JP1からvbs(PSExec)が起動できない

    突然失礼します。 以下のサーバーAにあるvbsを、JP1から起動しようとしていますが、うまく起動しないので、もし原因が分かる方がいたら、ご教授願いたいです。 起動しようとしているサーバーAの「test.vbs」は、簡単に言うと、PsExecを利用して、サーバーBの「hoge.bat」を実行する内容です。 ***test.vbs*** Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "PsExec.exe サーバーBIPアドレス -u 実行ユーザ -p 実行ユーザーパスワード cmd" WshShell.AppActivate "cmd " WScript.Sleep 3000 WshShell.SendKeys "cd C:\" WshShell.SendKeys "{enter}" WshShell.SendKeys "hoge.bat" WshShell.SendKeys "{enter}" WScript.Sleep 10000 WshShell.AppActivate "cmd" WshShell.SendKeys "exit" WshShell.SendKeys "{enter}" ************************ 上記バッチを手動で実行するとうまくいくのですが、 JP1で起動しようとすると、うまくいきません。 そもそもPsExecが実行出来ていないかも。。。。 宜しくお願いします。

  • VBScript

    下記、プログラムを実行すると、コマンドプロンプトの画面が 消えずに、そのまま残ってしまいます。 どうしたら、画面を消すことができるでしょうか。 お力添えをお願いいたします。 Set WshShell = Wscript.CreateObject("WScript.Shell") Set WshEnv = WshShell.Environment("user") WshEnv("C:\NET\aaa.txt") = "administrator" Wshshell.Run("cmd.exe") WScript.Sleep(500) WshShell.SendKeys("runas /user:administrator " + chr(34) + "xcopy D:\NET\aaa.txt C:\NET\aaa.txt" + chr(34)) WshShell.SendKeys("{Enter}") WScript.Sleep(500) WshShell.AppActivate "C:\WINDOWS\system32\runas.exe" WshShell.SendKeys("XXXXX") WshShell.SendKeys("{Enter}") WScript.Sleep(500)

  • Windows 7 でのWSH の挙動

    お世話になります。 msdnにある「電卓をアクティブにするサンプルを Vistaで実行すると、電卓がアクティブになり、 計算結果を吐き出しますが、 Windows7(Pro,SP1)で実行すると 最前面に電卓が出るものの アクティブになっていない上に、 複数の電卓がどんどん立ち上がってきます。 Vistaと7で、プロセス(?)の管理が 変わっているのだと思います。 7でも電卓をアクティブにするには、 どうすればいいのでしょうか? 以下コードです。 ================================================ set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "calc" WScript.Sleep 100 WshShell.AppActivate "Calculator" WScript.Sleep 100 WshShell.SendKeys "1{+}" WScript.Sleep 500 WshShell.SendKeys "2" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 500 WshShell.SendKeys "*3" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 2500 ================================================

  • マザーボードを換えたらVBSからの休止が出来なくなりました。

    こんにちは。 表題の件ですが、以前容易に”休止”に移行する為にVBSを使用しての 休止をアドバイスしていただいたのですが、今回表題に記したように マザーボードを換えたら以下のスクリプトで休止できなくなりました。 Set wShell=CreateObject("WScript.Shell") wShell.SendKeys "^+{esc}" Do While Not wShell.AppActivate("Windows タスク マネージャ") WScript.Sleep 100 Loop wShell.SendKeys "%uh%fx" '休止状態 なぜなのでしょう?アドバイスをお願いします。 ちなみに以前のマザーボード(ASUS P5-VMDO)で効果のあったScript.Sleep 100と記されてる行の数値を弄って見ましたが待機時間が変わるだけで”休止”になりませんでした。 現在のマザーボードはASUS P5Q Deluxeです。

  • WSHスクリプトでブラウザ更新

    教えてください。 WSHスクリプトでブラウザの更新をF5ではなくてControl + Rしたいのです。 Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 2000 WshShell.AppActivate "テスト" WScript.Sleep 2000 WshShell.SendKeys "^R" WScript.Sleep 2000 WScript.Echo "終了" 最初の一回目の実行時はできるのですが、それ以降更新してくれません。 よろしくお願いいたします。

  • 実行中のSendkeysのVBSを途中で停止したい

    下記のような実行中のSendkeysのVBSを途中で 停止するにはどうすればよいのでしょうか? Set s = WScript.CreateObject("WScript.Shell") for i=1 to 100 s.SendKeys i WScript.Sleep 500 next ご存知の方がおられましたらご回答をよろしくお願いします。

  • WSHを使いTELNETで%USEPROFILE%\デスクトップにファイルを複写したい

    WSHをはじめたばかりです。TELNETで接続した現在の相手のデスクトップにファイルを複写させたいと考えています。 DOSのように指定したのですがカナ文字や%がうまく渡されていないようなのですがどのように設定すればよいか教えてください。 下記のように作成しています。 よろしくお願いします。 set WshShell = WScript.CreateObject("WScript.Shell") WshShell.AppActivate "確認" WScript.Sleep 1000 adr = InputBox("端末IPアドレスを入力してください。", 1) adr = "telnet " & adr & "~" rem telnet ホスト名 WshShell.SendKeys adr WScript.Sleep 2000 rem ユーザー名 WshShell.SendKeys "administrator~" WScript.Sleep 1000 rem パスワード WshShell.SendKeys "administrator~" WScript.Sleep 1000 rem コマンド WshShell.SendKeys "cd %USEPROFILE%\デスクトップ~" WScript.Sleep 3000 rem あとCOPYによる複写コマンドの記述

  • 特定のフォルダを階層下まで表示を変えたい

    ほかのカテゴリで質問したのですが回答がありませんでした。 すべてのフォルダではなく、ある特定のフォルダの表示だけを階層下まで「詳細」に変更したいのです。 すべてのフォルダですとWindowsの処理で可能ですし、階層下までをしなくてもいいのなら、WSHで下のように書いて、その中へフォルダをドラッグしたらできました。 '----------------------------------------------------- Set objShell = WScript.CreateObject("WScript.Shell") objShell.SendKeys "{ENTER}" WScript.Sleep 200 objShell.SendKeys "%V" WScript.Sleep 200 objShell.SendKeys "^D" WScript.Sleep 200 objShell.SendKeys "%{f4}" '---------------------------------------- どなたか、階層下まで同じ処理をする方法か、それともそのような処理ができるフリーソフトをご存知ないでしょうか?