カスタム検索
Office関連

64ビット版Officeの注意点(Office 2010)

Office 2010では従来からの32ビット版に加え、64ビット版が追加されました。
32ビット版に比べて使用できるメモリ容量が大きく、2GBを超えるサイズのファイルを扱うことができ、なおかつ大量のファイルを処理できるようになりましたが、その反面従来の32ビット版のOffice用に作成されたActiveXコントロールやCOMアドインは64ビット環境を想定して作られてはいませんので、多くが64ビット版のOfficeでは動作しません。

実際私の環境(Windows 7 Ultimate(64ビット版) + Office Professional Plus 2010(64ビット版))では、リボンのタブに「Acrobat」が表示されず、Adobe Acrobat 9 StandardのOffice用アドインは動作しませんでした(Adobe PDFプリンタからのPDF作成は可能です)。

また、64ビット版対応に伴いVBAも新しいバージョンであるVBA 7(Microsoft Visual Basic for Applications 7.0)になりました。
従来のVBAではポインターデータ型が無かったため、ポインターやハンドルの値を保持するためにLong型を使用していました。しかし64ビット環境ではポインターやハンドルのサイズが32ビット版に比べて大きくなり、Long型を使用すると予期しないエラーが発生する可能性があるため、Office 2010ではその問題に対応した新しいデータ型、LongPtr型(ポインターデータ型)とLongLong型(64ビット数値型)が追加されました。
(変換するための演算子、CLngPtrCLngLngも追加されています。)

64ビット版のOfficeでDeclareステートメントでWindows APIを呼び出す場合、これまで使っていたLong型を適切な形で置き換える必要があります。また、64ビット版ではPtrSafe属性がないとコンパイル時にエラーが発生するため、DeclareステートメントにPtrSafe属性を追加しなければなりません。

上記のような変更に合わせて、Office 2010ではVBA7Win64という2つの条件付きコンパイル定数が追加されました。
VBA7はVBAのバージョンを区別するもので、Win64は32ビット/64ビットを区別するためのものです。
例えば32ビット版/64ビット版でDeclareステートメントによる宣言を分ける場合は、下記のようになります。

 

#If VBA7 And Win64 Then
  '64ビット版
  Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
#Else
  '32ビット版
  Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
#End If

 

#If VBA7 And Win64 Then
  '64ビット版
  Private Declare PtrSafe Function GetTickCount Lib "kernel32" Alias "GetTickCount64" () As LongLong
#Else
  '32ビット版
  Private Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
#End If
※ 単に32ビット版/64ビット版だけを区別する場合はWin64だけでも構いません。

 

下記のように適当な定数を1つ用意することで、32ビット版/64ビット版を判別しても良いかもしれません。

#If VBA7 And Win64 Then
  '64ビット版
  Const x64 As Boolean = True
#Else
  '32ビット版
  Const x64 As Boolean = False
#End If

Public Sub Sample()
  If x64 Then
    MsgBox "実行環境が64ビット版です。処理を中止します。", vbCritical + vbInformation
    Exit Sub
  End If
  MsgBox "このメッセージが表示された場合は実行環境が32ビット版です。"
End Sub

以上のように、Office 2010で新しく登場した64ビット版では注意すべき事項が何点かあります。
いずれは64ビット環境がメインになっていくとは思いますが、現段階(2010年6月時点)ではアドイン周り含めて環境が整っていないため、64ビット版の導入はあまり推奨されていません。
64ビット版のOffice 2010を導入する際には事前によく検討する必要があるでしょう。

参考Webページ:
「64 ビット版の Office 2010」
http://technet.microsoft.com/ja-jp/library/ee681792.aspx
「Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性」
http://msdn.microsoft.com/ja-jp/library/ee691831.aspx
「Working with VBA in Office 2010 (32-bit) and Office 2010 (64-bit)」
http://msdn.microsoft.com/en-us/library/ff700513%28office.11%29.aspx
「Excel: Declaring API functions in 64 bit Office」
http://www.jkp-ads.com/Articles/apideclarations.asp