Excel64ビット非対応コンパイルエラー!?

Excel64ビット版とは

Excelマクロ起動時に、突然の「コンパイルエラー」
このコンパイルエラーについて、回避策をまとめました。

コンパイルエラー:

「このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。Declareステートメントの確認および更新を行い、次にDeclareステートメントに、PtrSafe属性を設定してください。」
 
という内容でエラーが表示される場合の対処法についてご紹介したいと思います。
 
Office 32ビット版の環境でExcelマクロを利用していたが、最近、Office365導入により、新たなパソコン環境で当該エラーに遭遇するケースがありますが、VBAソースへの部分改修などで対応が可能です。

Excel には、[32ビット版]と[64ビット版]が存在する?

Microsoft Excel アプリケーションは、[32ビット版]と[64ビット版]が存在します。
 
Excelをインストールする際に、これまでは、「32ビット版」が規定値だったのですが、現在では、「64ビット版」が規定値に変わりました。
 
あまり気にすることなく、規定値のままインストールする、という方が多いと思いますが、お使いのExcelが64ビット版であり、Excelマクロ内で、PtrSafe宣言なしで、WindowsAPIを使用している場合、このエラーが表示されますので、この場合は、APIステートメント内での宣言が必要です。

Excel 32ビット/64ビットはどこで確認できる?

Excelを起動>ファイルメニュー>アカウント>Excelのバージョン情報
 
で32ビット版/64ビット版いずれかのエディションが確認できるので、まずは、確認してみましょう。
 
こちらが64ビット版の場合、必要に応じて、Excelマクロツール内の宣言の部分修正が必要です。

「Declare」ステートメントの後に「PtrSafe」付与

【64bit対応①】
たとえば、以下のような「Declare」ステートメントが使われている場合は、「Declare」の直後に「PtrSafe」付与が必要です。

‘////////////////////////////////////////////////////////////////////////////////////////

‘/ 64ビット版【対応その1】:「Declare」ステートメントの後に「PtrSafe」付与

‘////////////////////////////////////////////////////////////////////////////////////////

‘——————–【ネットワークへの参照アクセスを可能に

Declare PtrSafe Function SetCurrentDirectory Lib “kernel32” Alias “SetCurrentDirectoryA” (ByVal CurrentDir As String) As Long

 

‘——————–【Path存在チェックを可能に

Declare PtrSafe Function PathFileExists Lib “shlwapi” Alias “PathFileExistsA” (ByVal lpszPath As String) As Double

「#If VBA7 Then」分岐のソースを追記

【64bit対応②】

‘////////////////////////////////////////////////////////////////////////////////////////

‘/ 64ビット版【対応その2】「#If VBA7 Then」分岐のソースを追記

‘////////////////////////////////////////////////////////////////////////////////////////

#If VBA7 Then

Private Declare PtrSafe Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As LongPtr)

#Else

Private Declare  Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)

#End If

ExcelVBAバージョンの確認

ExcelVBAバージョンの確認は、Excelを起動し、[開発タブ]からExcelVBEを表示し、「バージョン情報」で確認ができます。

CSVデータ取込で、Excelメモリ不足って?

ご利用のExcelが32ビット版の場合で、大量なデータをExcelに取り込むような場合、例えば、膨大なCSVデータをインポートしてみた場合、次のエラーに遭遇。

「この操作を完了するにはメモリが不足しています。扱うデータ量を減らすか、他のアプリケーションを終了してください。使用できるメモリを増やすには、以下を検討してください。
-64ビット版のMicrosoft Excel を使う。」
 
よっぽど大きなFileサイズでない限り、このエラーに遭遇することも少ないのですが、この場合は、十分に検討して、Excel[64ビット版]に移行する必要があります。32ビットでしが動作しないプラグインなどもあるため、主流は64ビットに移行してゆくと思われますが、32ビットで動作するならその方が安心かもしれません。
 
但し、Fileサイズが直接要因の場合、それでも取込ができないケースもありますので、「手間をかけて64ビット版に移行したものの、結局、32ビット版に戻す…」というのは避けたいものですので、十分に、必要性を検討する必要があるかもしれません。

関連する記事

全国対応!お気軽にお問い合わせください