wsf上でvbeを呼び出す場合


最近、入力のお仕事を請けるようになり、少しでも協力者の入力が楽になるよう、
色々と支援ツールを作っています。

特にブラウザ経由で入力する場合、ブラウザを操作するようなプログラムを作る
と楽になります。しかも実際にブラウザを操作可能な端末が限定されている場合、
通常の方法だと著しく作業効率が落ちるため、何らかの手段が必要です。

別に入力画面を模したページをphp+Ajaxで作成し、そこからVBScriptファイルを
生成するような仕掛けを作り、そのVBScriptファイルでブラウザ操作が可能にな
るところまではすんなりできたのですが、VBScriptファイル内である程度ブラウ
ザを動かす仕掛けを組み込むとなると、今度は機密保持上の考慮もしなければな
りません。(むろんパスワードなどは手入力でいれていただくようにし、その部
分はあえて外しました)

ブラウザ操作のコア部分をVBScriptとしてエンコード化し、デコードされる可能
性を踏まえたうえで、vbeファイルとし、入力する対象レコードごとにphpで生成
したwsfファイルとして作成しました。実際に協力者が入力した部分は変数として
wsfファイルに書くことで、引数を沢山vbeに渡す煩雑さから逃れられるかなぁ。。
と思ったのです。

↓↓↓↓Data.wfs↓↓↓↓
<job id=”Entry”>
<script language=”VBScript.Encode” src=”Data.vbe”/>
<script language=”VBScript”>
Private strEntry1
Private strEntry2
Private Const strCode = “123456789”

strEntry1 = “○○○○○○○○○××××○○○○○○○○”
strEntry2 = “○△■△■○○○××××△■○○△■▽○”
Call DataEntry()
</Script>
</job>
↑↑↑↑Data.wfs↑↑↑↑

↓↓↓↓Data.vbe↓↓↓↓
option explicit

Public Sub DataEntry()
Dim ObjShell
Dim WshShell
Set WshShell = CreateObject(“Wscript.Shell”)
Set ObjShell = CreateObject(“Shell.Application”)

~処理内容~
Msgbox strCode
Msgbox strEntry1
Msgbox strEntry2

Set ObjShell = Nothing
Set WshShell = Nothing

Ene Sub
↑↑↑↑Data.vbe↑↑↑↑

ところが、このコード、wsfを実行すると、エラーになってしまいます。vbeの中で使用
するstrCodeやstrEntry1やstrEntry2の変数が宣言されていないというエラーです。よう
は呼び出し元で宣言した変数が継承されていないわけです。

ところが、
↓↓↓↓Data.wfs↓↓↓↓
<job id=”Entry”>
<script language=”VBScript” src=”Data.vbs”/>
<script language=”VBScript”>
Private strEntry1
Private strEntry2
Private Const strCode = “123456789”

strEntry1 = “○○○○○○○○○××××○○○○○○○○”
strEntry2 = “○△■△■○○○××××△■○○△■▽○”
Call DataEntry()
</Script>
</job>
↑↑↑↑Data.wfs↑↑↑↑

のように、Data.vbsとエンコード前のファイルを指定し呼ばれるData.vbsもエン
コード前の素のファイルを用意します。そうすると、正常に処理が行われてしま
うんですね。

なんででしょう・・・ただvbsを使ってしまうと最低限の機密保持という目的が達
成できません・・・こまりました・・・

結局
↓↓↓↓Data.wfs↓↓↓↓
<job id=”Entry”>
<script language=”VBScript.Encode” src=”Data.vbe”/>
<script language=”VBScript”>
Private strEntry(2)

strEntry(0) = “123456789”

strEntry(1) = “○○○○○○○○○××××○○○○○○○○”
strEntry(2) = “○△■△■○○○××××△■○○△■▽○”
Call DataEntry(strEntry)
</Script>
</job>
↑↑↑↑Data.wfs↑↑↑↑

↓↓↓↓Data.vbe↓↓↓↓
option explicit

Public Sub DataEntry(strEntry)
Dim ObjShell
Dim WshShell
Set WshShell = CreateObject(“Wscript.Shell”)
Set ObjShell = CreateObject(“Shell.Application”)

処理内容
Msgbox strEntry(0)
Msgbox strEntry(1)
Msgbox strEntry(2)

Set ObjShell = Nothing
Set WshShell = Nothing

Ene Sub
↑↑↑↑Data.vbe↑↑↑↑

と配列の引数渡しにすることでコード数を減らすのが精いっぱいでした・・・

このあたりの呼び出し先をvbsとvbeにすることで変数のスコープが異なる件、
かなり調べたのですが見つかりませんでした・・・内部的なエンジンの問題な
のでしょうか・・・


現在の状況です


またまた間が空いてしまいましたが・・・・

このところExcelやAccess、ASP(Classic)など、VB系の仕事に邁進しており、アドイン周りを駆使した配布の仕組みについて、熟達することができました。

また、セキュリティで閉鎖された空間でhtmlを使っての配布についても貴重な経験ができました。
<a href=”****.vbs”>ほげげ</a>などというやり方がありだとは・・・・

一方、個人の仕事でも、固定長→csvの変換システム作成のコーディネートの仕事や、phpのメールフォームの仕事を2件ほどこなしています。

この夏から再び始動しはじめ、現在はホームページ作成の仕事を一件と、WordPressをカスタマイズしたポータルリンク集の仕事を行っております。