2017-07-25 81 views
2

所以我有一個數據透視表和列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有時會插入新的工作表,其中包含第一或第二個位置的詳細信息。現在我想知道哪個是插入的新工作表,並將它分配wN

我是否必須製作一個數組或列表來記錄現有的工作表,然後每次檢查哪一個是新的?或者有一種簡單的方法可以確定哪個是工作簿中的最新工作表,而不考慮位置。

回答

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 

此鏈接到喬恩·珀耳帖頁的數據透視表應該是一個巨大的幫助... https://peltiertech.com/referencing-pivot-table-ranges-in-vba/

+0

大聲笑沒有想到的:)非常感謝,但該dp是瘋了。這是隨機圖片還是有任何參考? – vicky

+0

DP?流離失所者?醉酒農民(這實際上是一件... https://www.reddit.com/r/OfficialDP/)?好....不再搜索谷歌,得到一些肯定_不安全的工作_結果。 –

+0

DP = Display Pic aka Profile圖片 – vicky

0

顯示的代碼不會添加工作表,它會將wN設置爲索引爲1(第二個工作表創建)的任何工作表。

嘗試wN.Name = "C"& i & " field"以幫助確定何時創建每個工作表。

+0

'DATA.Range(「C」&I).ShowDetail = TRUE;此代碼將提供一個工作表該範圍有一個可調整的表格 – vicky

+0

無論如何,你會發現你並不是指用'Worksheets(1)'創建的最新表單。你需要做Vityata做的事情,並得到最新的索引表使用最新的。 ActiveSheet也可能做到這一點,但我不太熟悉數據透視表。 – ThatOneGuy

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

+0

這很容易訪問,因爲你有'Worksheets.Add After:= Worksheets(Worksheets.Count)'但是'DATA.Range(「C」&i).ShowDetail = True'無法控制工作表插入之前或之後很難分辨哪個是最新的工作表。 – vicky

+0

當使用DATA.Range(「C」&i).ShowDetail = True時,是否有任何設置或控件始終會在After:= Worksheets(Worksheets.Count)之後插入新的工作表? – vicky

+0

@vicky - 我看到你需要什麼,檢查編輯。 – Vityata