VBA 64ビット環境でCreateObject("ScriptControl")がエラーになる
解決済
回答 2
投稿
- 評価
- クリップ 4
- VIEW 55K+
下記、WEBのAPIをVBAで処理しているのですが、
64ビット環境のみCreateObject("ScriptControl")でエラーになってしまいます。
どのように対処すれば良いかわからず、ご質問させて頂きました。
Dim targetURI
targetURI = webAddress & "api/xxx"
'HTTP GET
Set HttpReq = CreateObject("MSXML2.XMLHTTP")
HttpReq.Open "GET", targetURI, False
HttpReq.send (Null)
'XML 受信
Dim restext As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", targetURI, False
.send
Set oXML = .responseXML
restext = .responseText
End With
'JSONをパース
Set sc = CreateObject("ScriptControl") '←ここでエラー
sc.Language = "JScript"
sc.AddCode "function jsonParse(s) { return eval('(' + s + ')'); }"
Set objJSON = sc.CodeObject.jsonParse(restext)
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+5
将来性を考えると ScriptControl に代わる方法を考えるのが一番です。
でも他の手段がないわけでもありません。
64bitのWindows にも 32bitの実行環境があり、
32bitの実行環境には ScriptControl が提供されているからです。
● 64bitのWindows に 32bitのExcelをインストールする
私は Windows 8.1 64bit に Excel 2013 32bit をインストールしているので試してみたら
Set sc = CreateObject("ScriptControl") の部分でエラーにならなかったので
たぶんイケると思います。
Microsoftも「32ビットの Office がほとんどのユーザーにお勧めです。」と言っています。
https://technet.microsoft.com/ja-jp/library/ee681792.aspx
64bitのExcel にこだわる理由がなければ、これが一番簡単だと思います。
● VBScript に移植して 32bit で動かす
VBScriptだと簡単に 32bit/64bit を変えられます。
試しに「Set sc = CreateObject("ScriptControl")」の1行を
test.vbs という名前のテキストファイルに書き込んで、
コマンドラインから以下の2つを実行して試してみてください。
C:\Windows\System32\cscript.exe test.vbs
C:\Windows\SysWow64\cscript.exe test.vbs
上の行は 64bit実行なのでエラーになります。
下の行は 32bit実行なのでエラーになりません。
全部を移植しなくても ScriptControl を使う部分だけ VBScript にして、
VBA から VBScript を32bit実行で起動して、
テキストファイルを介してデータをやり取りすれば修正量も少なくて済みますし。
(プログラム的には全くキレイではありませんが・・・)
とりあえず思い付いた方法を2つ書いてみました。
プログラムの寿命やら環境やらコストやら色々と考えて選択してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
以下などを参考に64bit環境でも動く別の代替案を検討したほうが良いでしょう。
http://www.ka-net.org/office/of32.html
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Tak1wa
2015/05/20 09:23
ExcelVBAですか?Officeも64bitでしょうか?
Qoo
2015/05/20 09:29
はい。ExcelVBAです。
開発環境は32ビットExcelなのですが、
他のPCの64ビットExcelで実行するとエラーになるようです。