我在Excel 2007中開發的VBA應用程序,它包含以下代碼,以允許從Shell32.dll
訪問ShellExecute
功能:我應該如何讓我的VBA代碼與64位Windows兼容?
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
我最初說:
顯然,應用程序將不會 在64位版本的Windows (仍在使用32位Office 2007)上編譯。我假設這是因爲
Declare
聲明需要更新。我讀過,Office 2010的推出 一個新的VBA運行時(VB7),而這 具有可在
Declare
語句中使用 一些新的關鍵字,允許它 正常在64位Windows上工作。 VB7也有新的預定義的編譯器 常量來支持條件 編譯,其中無論是舊的或新的 聲明將被使用, 根據應用 是否在32位或64位Windows上運行。但是,由於我堅持2007年辦公室 我需要一個替代解決方案。 我有什麼選擇? (我真的 寧願不必發佈2 我的應用程序的獨立版本,如果 在所有可能)。
然而,按照以下大衛的回答,我弄錯了,其中我Declare
聲明將無法工作情況。在64位Windows 64位上,Office 2010無法正常工作的唯一情況是。所以,Office 2007不是問題。
如果問題是64位辦公室,那麼VBA7不是答案。你需要win64編譯常量。 VBA7仍然可以在Office 2010 32位上運行。 – 2012-07-18 23:44:43
@AnonymousType這些指令正是從VB7和PtrSafe聲明的MSDN文檔:http://msdn.microsoft.com/en-us/library/ee691831.aspx需要使用PtrSafe來自使用VB7,而不是在64位系統上使用Office。 64個系統只支持VB7只是巧合,所以這一舉兩得。 – Alain 2012-07-19 00:46:23
'#if Win64'僅在需要加載兩個不同的dll或在32位和64位系統上使用具有不同簽名的函數的奇怪情況下才需要。爲了使傳統電子表格在強制使用VB7的64位計算機上工作,沒有必要。 32位Office 2010有意與所有傳統VB6電子表格兼容,無需任何修改(根據文檔)。 – Alain 2012-07-19 01:05:01