崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

VBAerがはじめてVBScriptを書いた

今まで、自分が会社のプログラムグループの中で一番若かったのですが、
明後日には後輩が入ってきます。


今まで「定例会議の資料の印刷」っていう作業は一番若い自分がやっていたのですが、
おそらく今後はその後輩にお願いすることになります。


ただこの作業については毎週やることなので、
自分は以前からずっと自動化できないかと思っていました。


それがVBScriptでどうにかほぼ自動化できることが分かったので、その方法について
後日簡単にですが書こうと思っています。


で今日のところはまずそもそもVBScriptをほとんど書いたことがなかったので、
書いてみて気付いたことを以下にちょっと挙げようと思います。

VBScriptの作り方と使い方

テキストエディタでスクリプト(VBScript)を書いて拡張子をvbsにして保存します。
実行はダブルクリックするだけです。
でもこれだとエラーが起きたとき何も表示されないので、作ってるときはコマンドプロンプトで実行します。

As Integer とかはいらない

Dim n As Integer

ではなくて

Dim n

のように書くようです。Subの引数のところなんかも一緒。

Sub Print(str)

VBAだったら使える定数が使えなかったり

使えないっぽいやつはスクリプトの最初に自分で定義するみたいです。
まあ現実的にはめんどいので直接値書いちゃうんですが。

const acForm = 2
const acModule = 5
const acMacro = 4
const acReport = 3

コマンドプロンプトに出力するときは

WScript.Echoを使えばいいようです。

WScript.Echo "コマンドプロンプトに出力されます。"

開いているウインドウを1つずつ処理するには

Shell.Applicationを使うようです。

Dim objShell
Set objShell = CreateObject("Shell.Application")
For Each objWindow in objShell.Windows
    '何か処理
Next

アプリケーションウインドウをアクティベートするには

WScript.ShellのAppActivateを使うようです。
ちなみにAppActivate後はすぐに次のコードを実行せずにちょっと待った方がいいみたいです。

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.AppActivate [アプリケーション名]


という訳で

次の処理を遅らせるには

WScript.Sleepです。引数の単位はミリ秒なので、以下だと1秒待ちます。

WScript.Sleep 1000

キー入力するには

WScript.ShellのSendKeysです。
ちなみにこれも入力後、WScript.Sleepでちょっと待たないとうまくいかないことがありました。

WshShell.SendKeys("abcde") ' 普通に文字を入力
WshShell.SendKeys("{ENTER}") ' Enterキー
WshShell.SendKeys("{UP}") ' ↑キー
WshShell.SendKeys("%fp") ' %はAltなので、Alt + F + P
WshShell.SendKeys("+{TAB}") ' +はShiftなので、Shift + Tabキー


今日はここまで。
なんかそういや昔、某巨大掲示板で「自動化くん」みたいな人いませんでしたっけ?