VBSでの引数の渡し方と参照方法

VBSでの引数の渡し方と参照方法

システム化を進めていく中で、必ず必要となるのが【共通機能(共通動作)の切り出し】です。

これには引数としてその時変数に入っている値を渡す動作がほぼセットでついて回ります。

VBSでシステムを作成していくにあたり、個人的に上手くできなかった方法を備忘録として記しておきます。

ハネられた共通処理について

  1. 別ファイルに分けたVBScriptのFunction部の呼出し
  2. カンマの入る引数の引き渡し
  3. シングルクォーテーション( ’ )の入った引数の引き渡し
  4. スペースの入る引数の引き渡し
  5. 引数を( )で囲うとエラー

それぞれに対処方法はあります。

別ファイルのFunctionを呼び出すには、別ファイル内でCallしたりsubなどにFunctionを呼び出すコードを書いて置けばOKです。この時、別ファイルへフラグとなる引数を渡して置けば「どのファイルから来たか」での動作変更も組めます。

私はFunctionを直接呼び出そうと思って区分けをしていたのでこれにはやられました。
私が知識不足なだけで何かやり方はあるのだと思いますが...。

具体例

'OKな例
 ’別ファイルのスクリプトを読み込む
  objAct.Run ("activeCh.vbs iexplore.exe")
 
  'activeCh.vbs中身
  '------------------------------
   Option Explicit
     Dim strIEexe
     Dim intProcID

     strIEexe = Wscript.Arguments(0)

     'subを動かす
     call ActiveIE

   '▼sub中身
     sub ActiveIE()
       Dim objWshShell
       'Functionを動かす
       GetProcID(strIEexe)
       If intProcID = 0 Then
          WScript.Quit(0) 
          Exit Sub
       End If
    
       Set objWshShell = WScript.CreateObject("WScript.Shell")
       objWshShell.AppActivate intProcID
       Set objWshShell = Nothing
     End Sub

    '▼Function中身
     Function GetProcID(ProcessName)
      Dim Service
      Dim QfeSet
      Dim Qfe

      Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
      Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")

      intProcID = 0

      For Each Qfe in QfeSet
          intProcID = Qfe.ProcessId
          Exit For
      Next

      GetProcID = intProcID <> 0
  End Function
  '------------------------------

'NGな例 ※hoge=>function名
  objAct.Run ("activeCh.vbs::hoge iexplore.exe")
  objAct.Run ("activeCh.vbs(hoge) iexplore.exe")
  objAct.Run ("activeCh.vbs[hoge] iexplore.exe")
  objAct.Run ("activeCh.vbs hoge iexplore.exe")

まとめ

まぁ郷に入っては郷に従えでしかないので覚えて回避ですね。

でもなぁ~、なんかやり方はあると思うんだよなぁ~。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください