所以我有一个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
。
我是否必须创建一个数组或列表来保存现有工作表的记录,然后每次检查哪个是新工作表?或者有一种简单的方法可以确定哪个是工作簿中的最新工作表而不管位置如何。
答案 0 :(得分:1)
查看Activesheet
。 ShowDetail
创建新工作表并激活它 - 因此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²。