簡體   English   中英

MS Word VBA 在 word 2003 中保存的文檔中導致 2010 64 位錯誤

[英]MS Word VBA in document saved in word 2003 causes error in 2010 64 bit

我有一個文檔,其中包含 VBA 宏,當我嘗試在 word 2010 64bit 中打開它時,它抱怨應該更新代碼以在 64 位系統上使用。 我添加了條件編譯子句#If Not 64Bit 但這沒有幫助。 還有什么可以做的嗎?

您是否使用任何 ActiveX 控件? 例如,如果您的 Word 應用程序顯示一個自定義用戶窗體,那么它上的控件(包括一些內置的)很可能無法正常工作。

這里

ActiveX 控件和 COM 插件兼容性

第三方和 Microsoft 提供的現有 32 位 ActiveX 控件與 64 位版本的 Office 2010 不兼容。對於 ActiveX 控件和 COM 對象,有三種可能的解決方案:

  • 如果有源代碼,可以自己生成64位版本,

  • 您可以聯系供應商獲取更新版本,

  • 您可以搜索替代解決方案。

Office 2010 中的本機 64 位進程無法加載 32 位二進制文件。 其中包括 MSComCtl 的常用控件(TabStrip、Toolbar、StatusBar、ProgressBar、TreeView、ListViews、ImageList、Slider、ImageComboBox)和 MSComCt2 的控件(Animation、UpDown、MonthView、DateTimePicker)。的 Microsoft Office 並由 32 位 Office 2010 安裝。必須為現有的 Microsoft Office VBA 解決方案找到替代方案,當代碼遷移到 64 位 Office 2010 時使用這些控件。64 位 Office 2010 不提供 64-通用控件的位版本。


使用 64 位版本的 Office 時, Declare語句也會受到影響:

在之前的 VBA 版本中,沒有特定的指針數據類型,因此使用了 Long 數據類型。 由於 Long 數據類型始終為 32 位,因此在具有 64 位 memory 的系統上使用時會中斷,因為高 32 位可能會被截斷或覆蓋其他 memory 地址。 這些情況中的任何一種都可能導致不可預知的行為或系統崩潰。

舊的Declare語句示例:

Declare Function RegOpenKeyA Lib "advapi32.dll" (ByVal Key As Long, ByVal SubKey As String, NewKey As Long) As Long

為了解決這個問題,VBA 現在包含一個真正的指針數據類型:LongPtr。

新版本:

Declare PtrSafe Function RegOpenKeyA Lib "advapi32.dll" (ByVal Key As LongPtr, ByVal SubKey As String, NewKey As LongPtr) As Long

此數據類型和新的 PtrSafe 屬性使您能夠在 32 位或 64 位系統上使用此 Declare 語句。 PtrSafe 屬性向 VBA 編譯器指示 Declare 語句針對 64 位版本的 Office 2010。如果沒有此屬性,在 64 位系統中使用 Declare 語句將導致編譯時錯誤。 請注意,PtrSafe 屬性在 32 位版本的 Office 2010 上是可選的。這使現有的 Declare 語句能夠像往常一樣工作。

再次從這里引用的行情

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM