VBScriptのコードを書くとき、メモ帳等のテキストエディタではインテリセンス(Intellisense)機能が使えず不自由な思いをすることがあります。
そこで、私はよくOffice付属のVBE(Visual Basic Editor)でコードを書くのですが、今回はそのVBEを使ってVBScriptコードを書くのを助けるVBScriptを紹介します。
・Excelを利用する場合(※ 動作確認は2010で行いました。)
Option Explicit Dim SysDir Const xlMinimized = -4140 With CreateObject("Excel.Application") .Visible = True .WindowState = xlMinimized 'ウィンドウ最小化 .Workbooks.Add() .CommandBars.FindControl(, 1695).Execute 'VBE表示 On Error Resume Next .VBE.CommandBars.FindControl(, 2558).Execute 'コードの表示 Select Case Err.Number Case 0 SysDir = CreateObject("Shell.Application").Namespace(37).Self.Path & .PathSeparator '参照設定 With .VBE.ActiveVBProject.References .AddFromFile SysDir & "scrrun.dll" 'Microsoft Scripting Runtime .AddFromFile SysDir & "shell32.dll" 'Microsoft Shell Controls And Automation .AddFromFile SysDir & "ieframe.dll" 'Microsoft Internet Controls .AddFromFile SysDir & "mshtml.tlb" 'Microsoft HTML Object Library End With 'コード初期入力 With .VBE.SelectedVBComponent.CodeModule .DeleteLines 1, .CountOfLines '全コード削除 .InsertLines 1, "Option Explicit" .InsertLines 2, "" .InsertLines 3, "'■ コピー&ペースト用" .InsertLines 4, "'CreateObject(""Shell.Application"")" .InsertLines 5, "'CreateObject(""Scripting.FileSystemObject"")" .InsertLines 6, "'CreateObject(""InternetExplorer.Application"")" .InsertLines 7, "'CreateObject(""htmlfile"")" .InsertLines 8, "'Wscript.Quit" .InsertLines 9, "" End With Case 1004 MsgBox "セキュリティセンターのオプション「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れてください。", 16 CloseWorkbooks .Workbooks .Quit Case Else MsgBox "エラーが発生しました。処理を中止します。", 16 CloseWorkbooks .Workbooks .Quit End Select On Error GoTo 0 End With Private Sub CloseWorkbooks(ByVal wbs) Dim wb For Each wb In wbs wb.Close False Next End Sub
・Wordを利用する場合(※ 動作確認は2010で行いました。)
Option Explicit Dim SysDir Const wdDoNotSaveChanges = 0 Const wdWindowStateMinimize = 2 With CreateObject("Word.Application") .Visible = True .WindowState = wdWindowStateMinimize 'ウィンドウ最小化 .Documents.Add() .CommandBars.FindControl(, 1695).Execute 'VBE表示 On Error Resume Next .VBE.CommandBars.FindControl(, 2558).Execute 'コードの表示 Select Case Err.Number Case 0 SysDir = CreateObject("Shell.Application").Namespace(37).Self.Path & .PathSeparator '参照設定 With .VBE.ActiveVBProject.References .AddFromFile SysDir & "scrrun.dll" 'Microsoft Scripting Runtime .AddFromFile SysDir & "shell32.dll" 'Microsoft Shell Controls And Automation .AddFromFile SysDir & "ieframe.dll" 'Microsoft Internet Controls .AddFromFile SysDir & "mshtml.tlb" 'Microsoft HTML Object Library End With 'コード初期入力 With .VBE.SelectedVBComponent.CodeModule .DeleteLines 1, .CountOfLines '全コード削除 .InsertLines 1, "Option Explicit" .InsertLines 2, "" .InsertLines 3, "'■ コピー&ペースト用" .InsertLines 4, "'CreateObject(""Shell.Application"")" .InsertLines 5, "'CreateObject(""Scripting.FileSystemObject"")" .InsertLines 6, "'CreateObject(""InternetExplorer.Application"")" .InsertLines 7, "'CreateObject(""htmlfile"")" .InsertLines 8, "'Wscript.Quit" .InsertLines 9, "" End With Case 6068 MsgBox "セキュリティセンターのオプション「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れてください。", 16 .Quit wdDoNotSaveChanges Case Else MsgBox "エラーが発生しました。処理を中止します。", 16 .Quit wdDoNotSaveChanges End Select On Error GoTo 0 End With
Excelを利用する場合とWordを利用する場合の2例を挙げましたが、やっていることは同じで、上記スクリプトを実行すると、Officeアプリケーションが起動すると同時にVBEが下図の状態で立ち上がります。
しかも「Microsoft Scripting Runtime」「Microsoft Shell Controls And Automation」「Microsoft Internet Controls」「Microsoft HTML Object Library」の4つを参照設定した状態なので、下図のようにInternetExplorerを操作するコードを書く場合でもインテリセンス機能によって簡単にコードを書くことができます。
VBE上から動作確認もできますが、コードをそのままテキストエディタに貼り付けても動作しないので、必要な部分を書き換えます(“コピー&ペースト用“としてコメント化している文字列はこのとき使います)。
簡単なプロパティやメソッドを入力するだけであればインテリセンス機能がなくても特に問題は無いのですが、”getElementsByTagName“や”GetAbsolutePathName“なんかを入力するとなると、それだけで結構なストレスです。入力ミスを防ぐ意味合いでもVBEの利用は非常に効果的ですね。
さらに、オブジェクトブラウザーからは定数やプロパティ、メソッド等を調べることができるので、指定すべき引数を忘れてしまった場合等には簡単に確認することができます。
非常に身近で簡単に利用できるVBE、皆さんも是非ご活用ください。
ちなみに、Officeアプリケーションのオプションから「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れていないと上記スクリプトは利用できませんので、その点だけはご注意ください。
すいません、最近VBSの勉強をしている初心者の者です。
最近今働いている会社で、支社の誰かがネットでウイルスダウンロードしてネット禁止になって
vbsエディタがダウンロードできません。
そこでこのページのコードを使わして頂いてVBSの練習をしようと思うのですが、
このページのコードをモジュールに貼り付ければいいのでしょうか?
それともSheetに貼ればいいのでしょうか
当方の環境は2003で家では再現できません。
4年前の記事なのでダメ元で質問してみます。
よろしくお願いします。
> BABANさん
当ブログ管理者のきぬあさです。
ご質問いただきました件につきまして、
> そこでこのページのコードを使わして頂いてVBSの練習をしようと思うのですが、
> このページのコードをモジュールに貼り付ければいいのでしょうか?
> それともSheetに貼ればいいのでしょうか
当記事で紹介しているのは「VBScript」のコードとなります。
メモ帳などのテキストエディタにコードを貼り付けて、拡張子を「vbs」として保存、ファイルをダブルクリックすることで、コードを実行することができます。
当記事で紹介しているコードは、
VBScriptからExcel(or Word)を起動→Officeで利用可能なVisual Basic Editorが起動→VBEを利用してVBScriptのコードを書く
といった内容になっています。
ただし、Officeのオプションで「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックが入っていないと、上手く動作しませんので、その点だけはご注意ください。