2011-06-10 75 views

回答

1

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

here

ActiveX控件和COM加載 兼容性

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

  • 如果你的源代碼,您可以生成一個64位版本的自己,

  • 您可以與供應商聯繫的更新版本,

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

Office 2010中的本機64位進程 無法加載32位二進制文​​件。此 包括 MSComCtl(TabStrip控件,工具欄, 狀態條,進度條,樹視圖, 列表視圖,ImageList中,滑塊, ImageComboBox)和 MSComCt2的對照(動畫,增減的, MonthView,的DateTimePicker, FlatScrollBar)的共同控制。這些對照者 微軟Office的早期版本安裝 和由 32位Office 2010安裝一種替代 必須找到現有利用 這些控件當代碼是 遷移到64微軟辦公 VBA的解決方案-bit Office 2010. 64位 Office 2010不提供公共控件的64位 版本。使用Office的64位版本時


Declare statments也受到了影響:

在VBA以前的版本,有 沒有具體的指針數據類型,這樣 Long數據類型被使用。並且由於 Long數據類型始終爲32位,所以在具有 64位內存的系統上使用時會中斷,因爲32位可能會被截斷,或者可能被 覆蓋其他內存地址。 以上任何一種情況都可能導致 出現不可預知的行爲或系統 崩潰。

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位系統。該PTRSAFE屬性 表明對VBA編譯器的 Declare語句是針對Office 2010中的 64位版本沒有 這個屬性,使用Declare 聲明在64位系統將 結果在編譯期一時間錯誤。注意 在32位版本的Office 2010上,PtrSafe屬性爲可選 。 這使現有的Declare 語句可以像其始終 一樣工作。從here採取

行情再次

+0

謝謝。它抱怨在VBA中聲明語句,所以我不認爲ActiveX控件是責備 – SparcU 2011-07-05 13:02:55

+0

@SparcU - Declare語句也受到影響 - 我會更新我的答案 – barrowc 2011-07-06 05:40:21

相關問題