excel vba如何在后续运行中通过代号引用宏创建的工作表

时间:2017-04-04 16:57:58

标签: excel vba excel-vba

我在VBA广告中非常新,我遇到以下问题。

我想通过代号引用工作表(因为选项卡名称可以由用户修改) 我知道无法添加指定代号的新工作表。

在运行我的宏时,我使用以下方法创建一个新的工作表:

Worksheets.Add().Name = "aSheet" 
st = Worksheets("aSheet").CodeName

现在我在变量st。

中有代号

在宏的后续运行中(在我不创建新工作表的一个中)我想通过代号访问以前创建的工作表,即我 想要使用代号为硬编码的代码。我不想使用

st = Worksheets("aSheet").CodeName

因为在两次运行宏之间,用户必须更改选项卡" aSheet"名称。

这对我来说似乎不可能,但我希望是错的。

1 个答案:

答案 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