我创建了一个在我的机器上完美运行的宏(Windows 64 位和 Office 32 位)
但客户面临问题。他有 Windows 64 位和 Office 64 位。
不知道为什么,但Sheet.Activate
不在他的机器上工作。请参阅下面的屏幕打印。
根据您的输入,我找不到“记录表”的声明。由于您在事件例程“Workbook_open”中输入了此代码,我怀疑您是否在任何地方进行了声明。
如果你想申请
RecordSheet.Activate
你至少应该做的是:
Set oRecordSheet = thisworkbook.sheets("Records")
oRecordSheet.activate
我强烈怀疑您的 Office / Windows 版本与它有什么关系。Microsoft 不再支持 Vba,并且没有对该语言进行进一步的开发。
如果它是客户,请考虑该客户可能已更改工作表名称的可能性。
如果您正确设置了工作表对象,这也可能是问题的根源。
编辑:
在查看您通过邮件收到的文件后,我确认上述解决方案修复了该错误。
更换整个
UserForm_Initialize
子程序:
Private Sub UserForm_Initialize()
Dim oRecordSheet As Excel.Worksheet
Set oRecordSheet = ThisWorkbook.Sheets("Expense Report")
oRecordSheet.Activate
EnableDisableConrols (False)
Call FillDropDowns
Navigator.Max = RecordSheet.UsedRange.Rows.Count
If RecordSheet.UsedRange.Rows.Count = 1 Then
RowNumber = 1
Else
RowNumber = 2
Call FillDataIntoControls
End If
End Sub
编辑 2:上述解决方案是正确的,但是,如果您的工作表的代号确实设置为 RecordSheet,您也可以使用此解决方案。但是请注意,代号只能与工作簿一起使用。
您的代码的第一行显示一个UserForm
. 一些广泛使用的表单控件(在ComCtl
库中定义的那些)在 64 位版本的 Office 中不存在,因此很可能UserForm
是问题所在。
除非您可以说服客户改用 32 位 Office 或更改您的UserForm
以便不使用受影响的控件,否则没有简单的解决方案。
受影响的控件有:ImageCombo、ImageList、ListView、ProgressBar、Slider、StatusBar、TabStrip(虽然普通库中有TabStrip的替代版本MSForms
)、Toolbar、Treeview
我认为可能缺少参考。
转到Tools
-> References
,看看是否有任何被列为缺失
删除那里的复选标记,基本的东西date
就会重新开始工作。如果这些引用对您正在运行的代码至关重要,则必须搜索 64 位等效项
有关参考的更多信息 - 通常解决“缺失”可以修复它,但是,从这里
您所描述的是典型的损坏引用。这可能是由于引用的文件是不同的版本或位于开发代码的机器和客户端机器之间的不同位置。我们公司还尝试保持所有机器的配置方式相同,但我发现这基本上是不可能管理的。
打开任何代码模块(或使用 Ctrl-G 打开调试窗口,前提是您尚未选择“将调试窗口保持在顶部”选项)。选择工具 | 来自菜单栏的引用。检查所有选定的参考。
如果任何选定的参考文献前面有“MISSING:”,请取消选择它们,然后退出对话框。如果您确实需要刚刚取消选择的参考(您可以通过编译所有模块来判断),请返回并重新选择它们。
如果没有“MISSING:”,请随机选择一个附加参考,退出对话框,然后返回并取消选择刚刚添加的参考。如果这不能解决问题,请尝试尽可能多地取消选择已选择的引用(Office 可能不允许您全部取消选择),退出对话框,然后返回并重新选择刚刚取消选择的引用。(注意:在删除它们之前写下引用的内容,因为当您返回时它们的顺序会有所不同)
(作为旁注,消除歧义为 VBA.xxxx 将起作用,因为 Excel 不再需要查看所有引用。)