VBAやVBScriptでURLエンコード処理する場合に、下記コードのようにScriptControlがよく使われます。
Public Sub Sample()
MsgBox EncodeURL("こんにちは")
End Sub
Private Function EncodeURL(ByVal sWord As String) As String
With CreateObject("ScriptControl")
.Language = "JScript"
EncodeURL = .CodeObject.encodeURIComponent(sWord)
End With
End Function
ところが64ビット環境で上記コードを実行すると、下図のようなエラーが発生します(64ビットOS上の32ビット版Office(WOW64上)ではエラーになりません)。
これは「msscript.ocx」が64ビット環境に対応していないためですが、「64bitウィンドウでmsscript.ocxを使ったスクリプトを実行できない」を見る限り、64ビット版のリリース予定は無さそうです。
そこで、今回はHTMLDocumentを使った代用コードの一例を下記にて紹介します。
2021/10/25:コードを一部修正しました。@KotorinChunChunさん、ご報告ありがとうございました!
Public Sub Sample()
MsgBox EncodeURL("こんにちは")
End Sub
Private Function EncodeURL(ByVal sWord As String) As String
Dim d As Object
Dim elm As Object
sWord = Replace(sWord, "\", "\\")
sWord = Replace(sWord, "'", "\'")
Set d = CreateObject("htmlfile")
Set elm = d.createElement("span")
elm.setAttribute "id", "result"
d.body.appendChild elm
d.parentWindow.execScript "document.getElementById('result').innerText = encodeURIComponent('" & sWord & "');", "JScript"
EncodeURL = elm.innerText
End Function
上記コードではexecScriptメソッドを用いて、適当なエレメントの適当なプロパティを通してencodeURIComponentメソッドの結果を取得しています。
上記コードはあくまでも一例ですが、64ビット環境でもScriptControlの代替手段を用いることで、URLエンコード等のJScriptの処理を実行することができます。
Sponsored Links
・ 64ビットで実行した場合は32ビットで再実行するVBScript