Office 2010 プログラムの 64 ビット バージョンで VBA マクロを編集するとコンパイル エラーが発生する

現象

次のような状況で問題が発生します。

  • Declare ステートメントを使用する Microsoft Visual Basic for Applications (VBA) マクロ コードを記述します。

  • VBA マクロ コードでは、コンパイル定数が使用されます。 たとえば、マクロ コードは次のコンパイル定数を使用します。

    • VBA7 #If
    • Win64 #If
  • 条件付きブロックでは、#Else ブロックを使用します。 #Else ブロックでは、Microsoft Visual Basic for Applications 6.0 で実行するように設計された Declare ステートメントの構文を使用します。

  • Microsoft Office 2010 プログラムの 64 ビット バージョンでコードを編集します。

  • #Else ブロックで Declare ステートメントを変更しようとするとします。

このとき、次のエラー メッセージが表示されます。

Microsoft Visual Basic for Applications

Compile error:

The code in this project must be updated for use on 64-bit
systems. Please review and update Declare statements and then
mark them with the PtrSafe attribute.

注:

この問題は、VBA マクロを編集する場合にのみ発生します。 この問題は、マクロを実行しても発生しません。

解決方法

この問題を解決するには、"コンパイル エラー" を無視し、Office 2010 プログラムの 64 ビット バージョンで VBA コードを実行します。

詳細情報

問題の再現手順

サンプル プログラムは例示のみを目的として提供されており、商品性、特定目的に対する適合性その他について明示であると黙示であるとを問わず、マイクロソフトは一切保証をするものではありません。 サンプル プログラムの利用者には、使用するプログラミング言語、およびプロシージャの作成とデバッグに使用されるツールに精通しているユーザーを想定しています。 Microsoft Support 担当者は、サンプル プログラムを利用してある特定のプロシージャの機能を説明することがありますが、改変して機能を追加したり、ユーザーの要望に応じてプロシージャを作成したりすることはありません。

使用可能なサポート オプションと Microsoft に連絡する方法の詳細については、次の Microsoft Web サイトを参照してください。

https://support.microsoft.com/contactus

  1. Windows 64 ビット オペレーティング システムで実行されている 64 ビット バージョンのMicrosoft Excel 2010を開始します。

    注:

    既定では、新しいブックが開きます。

  2. Alt キーを押しながら F11 キーを押して、Visual Basic for Applications 7.0 IDE ウィンドウを開始します。

  3. [挿入] メニューの [モジュール] をクリックします。

  4. 表示されるコード ウィンドウで、次のコードをコピーして貼り付けます。

    #If VBA7 Then
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
    #Else
        Private Declare Sub Sleep Lib "kernel32" (ByVal ms as Long)
    #End If
    
  5. 各 Declare ステートメントで、"ms" から "millisecs" に渡されるパラメーターの名前を手動で変更します。

2 番目の Declare ステートメントを変更すると、Visual Basic for Applications 7.0 では、PtrSafe を使用する必要があることを示すエラーが報告されます。 ただし、行が 6.0 Visual Basic for Applicationsでのみ実行されるセクションにあるため、レポートは正しくありません。 VBA 6.0 では PtrSafe は使用されません。 したがって、エラー メッセージを無視しても問題ありません。