我创建了一个宏,它在我的机器上运行得非常完美(Windows 64位和Office 32位)
但客户面临问题。他正在使用Windows 64位& Office 64位。
不知道为什么但Sheet.Activate
无法在他的机器上运行。请参阅下面的屏幕打印。
答案 0 :(得分:1)
根据您的输入,我找不到“记录表”的声明。 由于您在事件例程“Workbook_open”中输入此代码,我怀疑您是否在任何地方都进行了声明。
如果你想申请
RecordSheet.Activate
你应该做的最少的事情是:
Set oRecordSheet = thisworkbook.sheets("Records")
oRecordSheet.activate
我强烈怀疑您的Office / Windows版本与它有什么关系。 微软不再支持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,您也可以使用此解决方案。但请注意,代号只能与工作簿一起使用。
答案 1 :(得分:1)
我认为可能缺少参考文献。
转到Tools
- > References
,并查看是否有任何内容缺失
删除那里的复选标记,date
等基本内容将重新开始工作。如果这些引用对于您运行的代码至关重要,则必须搜索64位等效项
有关引用的更多信息 - 通常解决“缺失”修复它,但是,来自here
您所描述的是典型的损坏引用。这个可以 引用文件是不同版本或不同版本引起的 在开发代码的机器和之间的位置 客户机器。我们公司还试图保持所有配置的机器 以同样的方式,但我发现它基本上无法管理。
打开任何代码模块(或打开调试窗口,使用Ctrl-G,为您提供 没有选择“保持调试窗口在顶部”选项)。选择工具| 菜单栏中的参考。检查所有选定的参考文献。
如果任何选定的引用在其前面有“MISSING:”,则取消选择 他们,并退出对话框。如果你真的需要你的参考 只是未选中(您可以通过编译所有模块来判断),请返回 并重新选择它们。
如果没有“MISSING:”,请随机选择其他参考,然后退出 对话框,然后返回并取消选择刚添加的引用。如果 这并没有解决问题,尝试取消选择所选的多个 你可以参考(Office可能不允许你取消所有这些),退出 对话框,然后返回并重新选择您刚才的参考文献 未选中。 (注意:在删除之前记下引用的内容 他们,因为当你回去时他们将处于不同的顺序
(作为旁注,消除VBA.xxxx的歧义将起作用,因为Excel不再需要 查看所有参考文献。)
答案 2 :(得分:1)
代码的第一行显示UserForm
。 64位版本的Office中不存在一些广泛使用的表单控件(ComCtl
库中定义的控件),因此UserForm
很可能是问题所在。
除非您能说服客户使用32位Office或更改UserForm
以免使用受影响的控件,否则没有简单的解决方案。
受影响的控件有:ImageCombo,ImageList,ListView,ProgressBar,Slider,StatusBar,TabStrip(虽然普通MSForms
库中有TabStrip的替代版本),工具栏,Treeview