Fu1*_*13R 9 vba runtime-error rename worksheet excel-vba
我有一些代码,当我按下一个按钮时,它调用一个sub,它将向工作簿添加一个新工作表,然后更改工作表的代号,以便以后在我的代码中更容易引用.具体如下:
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"
Run Code Online (Sandbox Code Playgroud)
这似乎工作 - 但是 - 只有当我打开"开发人员"窗口或之前打开它时.
如果我在第一次打开Excel文档时单击该按钮(尚未打开"开发人员"窗口),则会添加工作表,但会出现以下错误,并且不会更改工作表的代号:
运行时错误'9':下标超出范围
只有当我按下Debug然后在"Developer"窗口再次打开后运行代码时才会添加代号.
有没有办法解决这个问题,以便用户不必打开开发人员窗口才能正常运行?
谢谢
@Comintern已经为您提供了一个有效的解决方案,但是此代码不会污染您的立即窗口,并使用隐藏_CodeName
属性来更改工作表名称而不是访问该vbComponents
集合.
它还使用早期绑定Worksheet
赋值wks
,然后使用With
块,因为它正在访问多个成员wks
.
有趣的是,VBProject成员使用的位置很重要.
Dim wbk As Workbook
Dim wks As Worksheet
Set wbk = ThisWorkbook
Set wks = wbk.Worksheets.Add
'Oddly, this statement MUST appear AFTER the Worksheets.add
Debug.Assert wbk.VBProject.Name <> vbNullString 'Don't pollute the Immediate window
With wks
.Name = "Admin - Save Log"
.[_CodeName] = "wksAdminSaveLog"
End With
Run Code Online (Sandbox Code Playgroud)
如果您需要打开 VBE,您可以“欺骗”调试上下文来为您执行此操作。VBE.MainWindow
这似乎可以通过强制存在来执行项目需要更新其索引的任何操作:
Dim wbk As Workbook
Dim wks As Worksheet
Set wbk = ThisWorkbook
Set wks = wbk.Sheets.Add
wks.Name = "Admin - Save Log"
Debug.Print wbk.VBProject.VBE.MainWindow.Caption '<--Force the VBE to exist.
wbk.VBProject.VBComponents(wks.CodeName).Name = "wksAdminSaveLog"
Run Code Online (Sandbox Code Playgroud)
编辑:
似乎简单地获取对 的引用VBE.MainWindow
就足够了(请参阅评论)。这也有效:
Dim editor As Object
Set editor = wbk.VBProject.VBE.MainWindow '<--Force the VBE to exist.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1004 次 |
最近记录: |