我在VBA广告中非常新,我遇到以下问题。
我想通过代号引用工作表(因为选项卡名称可以由用户修改) 我知道无法添加指定代号的新工作表。
在运行我的宏时,我使用以下方法创建一个新的工作表:
Worksheets.Add().Name = "aSheet"
st = Worksheets("aSheet").CodeName
现在我在变量st。
中有代号在宏的后续运行中(在我不创建新工作表的一个中)我想通过代号访问以前创建的工作表,即我 想要使用代号为硬编码的代码。我不想使用
st = Worksheets("aSheet").CodeName
因为在两次运行宏之间,用户必须更改选项卡" aSheet"名称。
这对我来说似乎不可能,但我希望是错的。
答案 0 :(得分:-1)
而不是转到工作簿的Worksheets
集合,只需通过其代号直接引用工作表:
debug.print Sheet5.name
如果您超级进入Worksheets集合,也可以使用它的索引:
debug.print Sheets(5).name
您可能会发现将工作表保存为全局变量(在函数或子例程范围之外声明)是有帮助的。全局变量在代码执行后可用,但如果工作簿已关闭并重新打开,则会重置。< / p>
Dim st As Worksheet
Sub addWorksheet()
Set st = ThisWorkbook.Worksheets.Add()
st.Name = "test3"
Debug.Print st.Name, st.CodeName
End Sub
变量st
是一个工作表对象,可以在设置之后在任何其他子例程或函数中引用。
......稍后
Sub printWSName()
Debug.print st.name
End Sub
最后,如果工作簿关闭,您可能希望保存此值。在“项目”窗格的“工作簿对象”中,可以使用Workbook_BeforeClose和Workbook_Open事件来保存和重新捕获此值:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("savedStuff").Cells(1, 1).Value = st.Name
End Sub
Private Sub Workbook_Open()
Set st = Worksheets(st.Name)
End Sub