2011-06-10 74 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