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

Excel開発コラム

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

投稿日: 2020年01月26日 カテゴリー:ExcelVBAエラー対策,PCやExcelトラブル

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ビット版に戻す・・・」というのは避けたいものですので、十分に、必要性を検討する必要があるかもしれません。

 

 

 

業務効率化ご案内

Excel業務効率化支援ツール

業務効率化セミナー情報

 

RPAアシロボ業務自動化

 

株式会社セルネッツ