TinySeleniumVBA と 64bit

TinySeleniumVBA を使うと Excel から Edge を操作していろんなことができます。
本当に便利です。まぁ、昔もIEで同じようなことができてましたが、Edgeになって遠のいていました。

そんな便利なTinySeleniumVBAですが、職場で何人かに使ってもらったところ、ある人のところでエラーが発生し、まったく使い物になりませんでした。

エラーメッセージは、『クラスが登録されていません』、英語だと『class not registered』。日本語で検索するといくつかヒットしますが、『管理者権限でSeleniumBasicをインストールし直す』といったものしか出てきません。TinySeleniumVBAはインストール不要で使えるのがメリットですし、SeleniumBasicは使っていないので的外れの情報です。

そこで、英語のメッセージで調べた時に見つけた情報が今回解決のヒントになりました。
そこには「32bitなら32、64bitなら64の、OSとドライバーのバージョンを揃えろ」というものでした。
イマドキ、32bitのWindowsなんてあり得ません。職場のPCは、どれも3年以内に購入してますし、Windows11対応なので、10から11へアップグレードしろとせがんでくるのを拒否するのがしょっちゅうあって面倒くさいとメンバーから苦情がくる位です。

しかし、ふと「あれ? もしかしてExcelのバージョン…」と疑念が浮かび、調べると、動かないものに限って『64bit版 Excel』でした。
当初は『64bit版 Excel あるある』の、WINAPI関係の Declare PtrSafe の問題かと思いましたが、症状は改善しません。

VBAの On Error GoTo 処理を外してトレースすると、WebDriverクラス内の CurrentURL の中で、『CreateObject(“ScriptControl”)』がエラーを起こしていることをやっと突き止めました。
この関数内で、URLを JavaScriptの(正確には JScript ですが)『DecodeURI』で変換したいがために呼び出しているわけですが、『コレ(ScriptControl)』が 64bit版 Excel では動かないのです。

この解決策を調べると、またいろいろ出てきますが、こちら Excel 32Bit版 と 64Bit版 の問題(1)CreateObject(“ScriptControl”) の方法でなんとか解決できました。
(こちらのソースも一部問題があります。『d.appendChild elm』のところは『d.body.appendChild elm』にしてください)
(余談ですが、DecodeURIの逆『 EncodeURI 』は、何もせずとも VBA の WorksheetFunction.EncodeUrl で変換できる。なして一方通行なん?)

これでようやく 64bit版 Excel で、TinySeleniumVBA が動くようになりました。

ちなみに「まったく使い物になりません」と書きましたが、CurrentURLを使わなければ問題は発生しなかったと思います。誤作動防止のために、開いているページが自動操作対象のURLかを最初にチェックする仕組みにしていたので、そこで止まっていた、というワケです。