VBScript

Office付属のVBEでVBScriptコードを書くのを助けるVBScript

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 プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れていないと上記スクリプトは利用できませんので、その点だけはご注意ください。

「NetOffice」で簡単に.NETからOfficeを操作前のページ

Officeのヘルプを単独で開く。次のページ

関連記事

  1. VBScript

    msgファイルから添付ファイルを抽出するVBScript

    「msgファイルから添付ファイルを抽出するスクリプト」といったキーワー…

  2. VBScript

    指定したフォルダ内で最も更新日時の新しいファイルのパスを取得するVBScript

    大量のログファイルから最新のファイルのみを取得する必要があったので、簡…

  3. VBScript

    GUIDを作成するVBScript

    Office アドインを作成するのに必要(マニフェストのId要素)なG…

  4. VBScript

    Microsoft Edgeのバージョン情報をクリップボードにコピーするVBScript

    前回の記事に引き続き、自分の手間を減らすためのスクリプト、今回はMic…

  5. VBScript

    Adobe Illustratorを操作するVBScript

    Acrobatと同様にタイプライブラリが用意されているため、VBAやV…

コメント

    • BABAN
    • 2016年 3月 23日 1:10am

    すいません、最近VBSの勉強をしている初心者の者です。
    最近今働いている会社で、支社の誰かがネットでウイルスダウンロードしてネット禁止になって
    vbsエディタがダウンロードできません。

    そこでこのページのコードを使わして頂いてVBSの練習をしようと思うのですが、
    このページのコードをモジュールに貼り付ければいいのでしょうか?
    それともSheetに貼ればいいのでしょうか

    当方の環境は2003で家では再現できません。
    4年前の記事なのでダメ元で質問してみます。

    よろしくお願いします。

    • > BABANさん

      当ブログ管理者のきぬあさです。
      ご質問いただきました件につきまして、

      > そこでこのページのコードを使わして頂いてVBSの練習をしようと思うのですが、
      > このページのコードをモジュールに貼り付ければいいのでしょうか?
      > それともSheetに貼ればいいのでしょうか

      当記事で紹介しているのは「VBScript」のコードとなります。
      メモ帳などのテキストエディタにコードを貼り付けて、拡張子を「vbs」として保存、ファイルをダブルクリックすることで、コードを実行することができます。

      当記事で紹介しているコードは、

      VBScriptからExcel(or Word)を起動→Officeで利用可能なVisual Basic Editorが起動→VBEを利用してVBScriptのコードを書く

      といった内容になっています。
      ただし、Officeのオプションで「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックが入っていないと、上手く動作しませんので、その点だけはご注意ください。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP