2017-07-25 24 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の場合、新しいワークシートが1番目または2番目の位置に挿入されることがあります。今私は、挿入された新しいワークシートがどれであるかを知りたいので、wNを割り当てます。

既存のワークシートの記録を保持し、毎回新しいワークシートを確認する配列またはリストを作成する必要がありますか?位置に関係なくブック内の最新のワークシートがどれであるかを簡単に判断する方法があります。

答えて

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 

ジョンペルチェページへのこのリンクは巨大な助けとなるはずです... https://peltiertech.com/referencing-pivot-table-ranges-in-vba/

+0

LOLはそれについて考えていませんでした:)ありがとう、しかし、そのdpはクレイジーです。それはランダムな写真ですか、それとも何か参考になっていますか? – vicky

+0

DP?放置された人?酔っぱらい農民(実際には... https://www.reddit.com/r/OfficialDP/)ですか? OK....もうGoogleを検索していない、確かに_安全ではない_結果を得ていた。 –

+0

DP =プロフィール画像を表示する – vicky

0

表示されているコードはワークシートを追加せず、インデックス1(2番目のシートが作成されたシート)のシートにwNを設定します。

wN.Name = "C"& i & " field"を試して、各シートの作成時期を把握してください。

+0

'DATA.Range( "C" &I).ShowDetail = true'にこのコードは、提供のワークシートを追加しますその範囲にピボットがあります – vicky

+0

に関係なく、あなたは 'Worksheets(1)'で作成された最新のシートを参照していないことがわかります。あなたはVityataがやっていることをして、最新のものを使うために最後の索引シートを入手する必要があります。 ActiveSheetは、これを達成するかもしれませんが、ピボットテーブルにあまり慣れていません。 – ThatOneGuy

0

新しいブックを開きます。最後の1が追加wsNewが常にあることを、

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 

あなたが見るであろう。そして、このコードを数回実行します。したがって、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ワークシート(Workheets.Count)の後に常に新しいワークシートを挿入する設定やコントロールはありますか? – vicky

+0

@vicky - あなたが必要とするものを見て、編集を確認してください。 – Vityata

関連する問題