カスタム検索
Office関連

64ビット環境でのScriptControlの代わり

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
64ビット版OfficeでURLエンコード処理ができない?