You write a Microsoft Visual Basic for Applications (VBA) macro code that uses Declare statements.
Your VBA macro code uses compilation constants. For example, your macro code uses one the following compilation constants:
You use an #Else block in a conditional block. In the #Else block, you use syntax for a Declare statement designed to run in Microsoft Visual Basic for Applications 6.0.
You edit the code in a 64-bit version of a Microsoft Office 2010 program.
You try to change the Declare statement in the #Else block.
In this scenario, you receive the following error message:
Microsoft Visual Basic for Applications
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.
Note This issue only occurs when you edit the VBA macro. This issue does not occur when you run the macro.
To resolve this issue, ignore the "Compile error" and run the VBA code in the 64-bit version of the Office 2010 program.
Steps to reproduce the problem
Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or Microsoft Advisory Services. For more information, visit these Microsoft Web sites:
Start the 64-bit version of Microsoft Excel 2010 that is running on a Windows 64-bit operating system.
Note By default, a new workbook is opened.
Press ALT+F11 to start the Visual Basic for Applications 7.0 IDE window.
On the Insert menu, click Module.
In the code window that appears, copy and paste the following code:
#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
In each Declare statement, manually change the name of any parameter that is passed from "ms" to "millisecs."
When you change the second Declare statement, Visual Basic for Applications 7.0 will report an error that indicates that you have to use PtrSafe. However, the report is incorrect because the line is in a section that only runs in Visual Basic for Applications 6.0. VBA 6.0 does not use PtrSafe. Therefore, you can safely ignore the error message.