我有一段代码,当我按下一个按钮时,会向工作簿中添加一个新的工作表,并更改工作表的代码名称,以便在日后的代码中更容易引用它。
这确实可以工作 - 但是 - 只有当我打开“开发人员”窗口或以前曾经打开过它时才能运行。
如果我在第一次打开Excel文档时单击按钮(没有打开“开发人员”窗口),它会添加该工作表,但是会出现以下错误,并且不会更改工作表的代码名称:
运行时错误“9”:下标超出范围
只有当我按下调试并在再次打开“开发人员”窗口后运行代码时,它才会添加代码名称。
是否有任何方法可以解决这个问题,使用户不必打开开发人员窗口即可正确运行?
Dim wbk As Workbook
Dim wks As Worksheet
Set wbk = ThisWorkbook
wbk.Sheets.Add.Name = "Admin - Save Log"
Set wks = wbk.Worksheets("Admin - Save Log")
wks.Parent.VBProject.VBComponents(wks.CodeName).Name = "wksAdminSaveLog"
这确实可以工作 - 但是 - 只有当我打开“开发人员”窗口或以前曾经打开过它时才能运行。
如果我在第一次打开Excel文档时单击按钮(没有打开“开发人员”窗口),它会添加该工作表,但是会出现以下错误,并且不会更改工作表的代码名称:
运行时错误“9”:下标超出范围
只有当我按下调试并在再次打开“开发人员”窗口后运行代码时,它才会添加代码名称。
是否有任何方法可以解决这个问题,使用户不必打开开发人员窗口即可正确运行?
Set wks = wbk.Sheets.Add
,然后再设置它的.Name
。这样你就不需要两次拼写字符串字面量了。 - Mathieu GuindonDoEvents
调用。不过,如果可能的话,最好使用Application.Ontime
调用来运行更改代码名称(以及发生的任何其他事情)的代码。 - Rorywks.CodeName
不存在作为组件。这是棘手的问题。有趣的问题。 - Mathieu GuindonVBComponents
集合在运行时开始初始化,但打开IDE会触发刷新(可能在单独的线程中触发,但仍然访问该集合的同一实例),因为此时必须显示所有可用组件。在打开IDE之前,该特定索引不存在,因为它在运行时开始时不存在。不过我不知道你如何测试 - * 瞪着@Mat'sMug * - SierraOscar