質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

90708閲覧

VBA 64ビット環境でCreateObject("ScriptControl")がエラーになる

Qoo

総合スコア1249

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

2グッド

4クリップ

投稿2015/05/20 00:21

下記、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)

okumurakengo, hidehara👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/05/20 00:23

ExcelVBAですか?Officeも64bitでしょうか?
Qoo

2015/05/20 00:29

はい。ExcelVBAです。 開発環境は32ビットExcelなのですが、 他のPCの64ビットExcelで実行するとエラーになるようです。
guest

回答2

0

ベストアンサー

64bitの実行環境に ScriptControl が提供されていないのでエラーになります。

将来性を考えると 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つ書いてみました。

プログラムの寿命やら環境やらコストやら色々と考えて選択してください。

投稿2015/05/21 10:08

twck

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

64bit用のActiveXコンポーネントが提供されていないためですね。
以下などを参考に64bit環境でも動く別の代替案を検討したほうが良いでしょう。

http://www.ka-net.org/office/of32.html

投稿2015/05/20 00:33

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問