如何获取新插入的工作表

所以我有一个pivottable,在C列中有一个字段,我使用它显示每个logging的详细信息

For i=7 to 10 DATA.Range("C" & i).ShowDetail = True Set wN = ThisWorkbook.Worksheets(1) Next i 

现在它工作正常,但问题是Set wN = ThisWorkbook.Worksheets(1)指定DATA.Range("C" & i).ShowDetail = True的第一个工作表,但DATA.Range("C" & i).ShowDetail = True有时插入新的工作表,其中第一或第二位。 现在我想知道哪个是插入的新工作表,并将它分配给wN

我是否必须创build一个保存现有工作表logging的数组或列表,然后每次检查哪一个是新的? 或者有一个简单的方法可以确定哪个是工作簿中的最新工作表,而不考虑位置。

看看ActivesheetShowDetail创build新表并激活它 – 所以Set wn=ActiveSheet应该工作。

 Sub Test() Dim c As Range Dim wrkSht As Worksheet With ThisWorkbook.Worksheets("Sheet2").PivotTables(1) For Each c In .DataBodyRange.Resize(, 1) c.ShowDetail = True Set wrkSht = ActiveSheet Debug.Print wrkSht.Name Next c End With End Sub 

这个链接到Jon Peltiers页面上的数据透视表应该是一个巨大的帮助… https://peltiertech.com/referencing-pivot-table-ranges-in-vba/

显示的代码不会添加工作表,它会将wN设置为索引为1(第二个工作表创build)的任何工作表。

尝试wN.Name = "C"& i & " field"来帮助找出每个工作表正在创build。

打开一个新的工作簿。 然后运行这个代码几次:

 Option Explicit Public Sub TestMe() Dim wsNew As Worksheet Worksheets.Add After:=Worksheets(Worksheets.Count) Set wsNew = Worksheets(Worksheets.Count) Debug.Print wsNew.Name End Sub 

你会看到, wsNew总是最后一个添加的。 因此,使用Worksheetes(Worksheets.Count)您可以访问它。

编辑:如果你想知道最后添加的工作表的名称,而不添加After: ,然后使用集合来记住你以前的所有工作表,只是将它们与新的集合进行比较。 运行这个代码几次:

 Option Explicit Public Sub TestMe() Dim wsCollection As New Collection Dim lngCounter As Long Dim strName As String Dim blnNameFound As Boolean Dim ws As Worksheet For Each ws In Worksheets wsCollection.Add ws.Name Next ws Worksheets.Add For Each ws In Worksheets blnNameFound = False For lngCounter = 1 To wsCollection.Count If wsCollection.Item(lngCounter) = ws.Name Then blnNameFound = True End If Next lngCounter If Not blnNameFound Then Debug.Print ws.Name Next ws End Sub 

复杂性是O²。