如何获取新插入的工作表

时间:2017-07-25 15:03:22

标签: excel vba excel-vba

所以我有一个pivottable,在C列中有一个字段,我用这个显示每条记录的详细信息

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

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

我是否必须创建一个数组或列表来保存现有工作表的记录,然后每次检查哪个是新工作表?或者有一种简单的方法可以确定哪个是工作簿中的最新工作表而不管位置如何。

3 个答案:

答案 0 :(得分:1)

查看ActivesheetShowDetail创建新工作表并激活它 - 因此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/

答案 1 :(得分:0)

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

尝试使用wN.Name = "C"& i & " field"来帮助确定每张工作表的创建时间。

答案 2 :(得分:0)

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

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²。