質問: vbaをexcel2010/2013で利用 下記urlのサンプルファイルに含まれるvbaで作成されたユーザー定義関数について、 excel2003(windows7)の環境で利用することが出来ました。 http://www.relief.jp/itnote/archives/003799.php しかしながら、excel2010およびexcel2013(ともにwindows7)で開くと、結果が #value! と変わってしまい、正しく表示されませんでした。 vbaの参照設定でも同じものにチェックを入れている状態ですが、うまくいきません。 (ただし、microsoft excel xx.x object libraryやmicrosoft office xx.x object library などバージョンの差異はあり) excel2010またはexcel2013において、このユーザー定義関数を 正しく利用できる方法が分かりましたらご教示いただけますと助かります。
回答: 64ビット版のwindowsをお使いの場合には、 msscript.ocxが存在しないのでscriptcontrolも使えません。 excelではなくてwindowsが64ビットか32ビットか、の問題のようです。 #私は64ビットでインストール出来るものはすべて64ビットしか経験がないので、 #32ビットなら動くのかどうか、わかりませんが、、、。 『64ビット版officeでurlエンコード処理ができない?に対する返信1 』 http://dirtysexyquery.blogspot.jp/2011/10/64officeurl1.html 『64ビット環境でのscriptcontrolの代わり』 http://www.ka-net.org/office/of32.html ダウンロード『•msscript.ocxが存在しない64ビット版のwindowsでscriptcontrolを動作するようにします。』 http://www.eonet.ne.jp/~gakana/tablacus/scriptcontrol.html 以上、原因を知ることと、対策の可能性について、参考になると思います。 以下、元々64ビット環境用に書いていたものですが、 結果的に32ビットでもいけるので、汎用性を考えるとこんな感じになると思います。 関数名(2カ所)は、お好きなように。 ' ' /// url文字列(utf-8)をデコードする(64bitos対応) function decodeutf8(byval source as string) as string dim ohtmlfile as object dim oelement as object source = replace(source, "\", "\\") source = replace(source, "'", "\'") set ohtmlfile = createobject("htmlfile") set oelement = ohtmlfile.createelement("span") oelement.setattribute "id", "response" ohtmlfile.appendchild oelement ohtmlfile.parentwindow.execscript _ "document.getelementbyid('response').innertext " _ & "= decodeuricomponent('" & source & "');", "jscript" decodeutf8 = oelement.innertext end function