Skip to content

Instantly share code, notes, and snippets.

@honda0510
Created July 29, 2011 09:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save honda0510/1113516 to your computer and use it in GitHub Desktop.
Save honda0510/1113516 to your computer and use it in GitHub Desktop.
VBAでURLエンコード
Function UrlEncodeUtf8(str As String) As String
Dim script As Object
Set script = CreateObject("ScriptControl")
script.Language = "Jscript"
UrlEncodeUtf8 = script.CodeObject.encodeURIComponent(str)
End Function
@yu-tang
Copy link

yu-tang commented Aug 14, 2011

64bit 環境だと、NG という話がありますね。

Office 2007/2010・リボンのカスタマイズ 初心者備忘録

64bit CPU でも Office 2003 とかだとふつうに動くので、要は WOW64 は OK だけれど 64bit 版の Office 上での実行が NG、という意味なのかな、と思いますが。
ただ IE 経由するのは、回避できても気持ちが悪い…。
そういう人は、下記のような手もアリか?

WSH/JScript(64bit)からScriptControlを使えるように32bit版wshを呼び出す | Codetter(こーどったー)β

微妙ですけど…。

@honda0510
Copy link
Author

コメントありがとうございます!
そういうことがあるんですね。

@honda0510
Copy link
Author

64bit 環境だと、NG という話がありますね。

この方法だとどうですかね~?

Windows スクリプト コンポーネントをWebにアップして使おう
http://blog.honda0510.dotcloud.com/?p=483

@yu-tang
Copy link

yu-tang commented Oct 11, 2011

目的が何かによりますね。
encodeURIComponent メソッドの呼び出しが目的なら、それでも良いと思います(し、Web でなくローカルでスクリプト叩いても良いと思います)。
ScriptControl が目的 (=アドホックにスクリプトを実行したい) なら、別方向になると思います。
自分は後者の目的が強いので、スクリプトにインプロセスでオブジェクト(たとえば Worksheet オブジェクトとか)を渡せないと、魅力半減なんですよね…。
ただスクリプトがイントラネット上にあるという形態は、GUI を伴わないアップグレードには便利ですね。

@honda0510
Copy link
Author

目的が何かによりますね。

あ、64bit 環境で動くか?ということでした。

@yu-tang
Copy link

yu-tang commented Oct 11, 2011

スクリプトにインプロセスでオブジェクト(たとえば Worksheet オブジェクトとか)を渡せないと、

自分で読み直すと、表現が変でしたね。
メソッドに引数としてオブジェクトを渡すことはできますけど、自分が言いたかったのは、ScriptControl で可能になっている、AddObject によるグローバルな変数展開ができない、という意味です。そういうことしたがる人は、少ないと思いますが。

あ、64bit 環境で動くか?ということでした。

自分も x64 版 Office 持ってないので実地にどうかは分からないんですが、そちらのコードは ScriptControl と関係ないので、WSC の x64 版があれば(ふつうある)理論上動くと思います。
試せる人が報告つけてくれると、いいですね。

@honda0510
Copy link
Author

AddObject

何ですかこれ?
記事化を期待してもいいですか?(・∀・)ニヤニヤ

試せる人が報告つけてくれると、いいですね。

モーグ!

@yu-tang
Copy link

yu-tang commented Oct 11, 2011

記事化を期待してもいいですか?(・∀・)ニヤニヤ

x64 版を出さないと M$ が明言した段階で死亡宣告なので、ScriptControl の記事化は基本無いです。

しかし、わずか2ヶ月前にこんな記事を書いている人もいる。
VBAでスクリプトエンジンを直接動かす
面白いですね。

@honda0510
Copy link
Author

x64 版を出さないと M$ が明言した段階で死亡宣告なので、ScriptControl の記事化は基本無いです。

ざんねーん

VBAでスクリプトエンジンを直接動かす

コードをコピペしただけじゃ動かないですねw

@yu-tang
Copy link

yu-tang commented Oct 11, 2011

コードをコピペしただけじゃ動かないですねw

はい。記事末尾に書いてある通り、自分でタイプライブラリ作らないといけないです。
タイプライブラリはふつう MKTYPLIB.EXE で .odl から作りますが、Visual Studio (というか、Visual C++) 持ってないと、このユーティリティは無かったような(元記事執筆者さんの環境は VS 6.0 と思われる。最近の VS には MKTYPLIB.EXE 付いてない模様)。
なので、持ってない人は、誰かが作った tlb を DL して使うことになります。

ま、でも ScriptControl を使えば済む 32bit 版ユーザーにとっては、今のところ関係ない話ですけどね。

@honda0510
Copy link
Author

あ~もうぜんぜんついていけません。
YU-TANGさんすごいっすね。

@yu-tang
Copy link

yu-tang commented Oct 11, 2011

お蔭様で、ここでやり取っているうちに、64bit 環境でURLエンコードする別の方法を思いついたので、暇になったら書きます。
(しかし検証ができんな…)

@honda0510
Copy link
Author

マジッすか。ぜひぜひ。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment