読者です 読者をやめる 読者になる 読者になる

VBScriptでインストールされているExcelが32bitか64bitか判断する

Application.Hinstanceにアクセスできるかどうかで判断する。

このプロパティでは、32 ビット版の Excel でのみ適切なハンドルが返されます。Excel 2013 で導入された HinstancePtr プロパティは、32 ビット版と 64 ビット版の両方の Excel 2013 で正しく動作します。
Dim ExcelApp
Set ExcelApp = CreateObject("Excel.Application")
if ExcelApp is Nothing then
	'MsgBox "Excelがインストールされていません。",vbCritical
	WScript.Quit
end if

on error resume next
if IsNumeric(ExcelApp.Hinstance) = False then
	MsgBox "64"
else
	MsgBox "32"
end if
on error goto 0
Set ExcelApp = Nothing

WOW64の力で32bitのアプリケーションからVBS動かすと環境変数みても32bitだと判定になってしまうので以下の方法では無理・・・
======================================================
ExcelVBAのように簡単に取れないので、以下のルールで判断してみた。

OSが32bitならExcelも32bit版
OSが64bitでExcelのインストールpathに(x86)があれば32bit版
OSが64bitでExcelのインストールpathに(x86)がなければ64bit版

Dim ExcelApp
Set ExcelApp = CreateObject("Excel.Application")

if ExcelApp is Nothing then
	MsgBox "Excelがインストールされていません。Excelをインストールの上、再度インストールしてください。",vbCritical
	WScript.Quit
end if

Dim objWshShell
Set objWshShell = CreateObject("WScript.Shell")

'Excel 64/32bitの判別
'OSが32bitならExcelも32bit版
'OSが64bitでExcelのインストールpathに(x86)があれば32bit版
'OSが64bitでExcelのインストールpathに(x86)がなければ64bit版
Dim strMode
strMode = objWshShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")
If UCase(strMode) = "X86" Then
	'OSが32ビット
Else
	'OSが64ビット
	if InStr(ExcelApp.Path,"Program Files (x86)") = 0 then
		'Excelが64ビット
	end if
End If
Set objWshShell = Nothing

ネタ元