2017-04-02 30 views
0

これまではピボットテーブルでVBAを使用していませんでした。今度は2ピボットテーブルを更新(リフレッシュ)し、暦年のフィルタを最後の1週間に設定したいと思います。ここVBAを使用したフィルタを使用したピボットテーブルの更新

私の質問/問題は次のとおりである:

1)私は実際に.ClearAllFilters行が必要ですか私はそれなしで、フィルタを設定することができますか?
2)対応するアイテム(週番号13など)が自分のテーブルに存在する場合、フィルタを設定する前に確認できますか?それ以外の場合は、まだ存在しないものをフィルタリングしようとします。
3)正しいコードを書いていますか、それとも短くて良い方法がありますか?例えば。 WithWithの範囲内であればわかりませんでした。

マイコード:

Dim varLastSunday As Date, varWeekNumber As Integer 

varLastSunday = Date - Weekday(Date, vbUseSystemDayOfWeek) 
varWeekNumber = CLng(Format(varLastSunday, "ww")) 

Application.ScreenUpdating = False 
With Worksheets(4) 
    .Range("StartColumns").EntireColumn.Hidden = False 
    .PivotTables("PivotTable9").PivotCache.Refresh 
    .PivotTables("PivotTable9").PivotFields("WEEK_NUMBER").ClearAllFilters 
    .PivotTables("PivotTable9").PivotFields("WEEK_NUMBER").CurrentPage = varWeekNumber 
    .PivotTables("PivotTable10").PivotCache.Refresh 
    .PivotTables("PivotTable10").PivotFields("week").ClearAllFilters 
    .PivotTables("PivotTable10").PivotFields("week").CurrentPage = varWeekNumber 
End With 
Application.ScreenUpdating = True 
+0

1.テストを行います。おそらく、DLookup()を1つのオプションとして使用します3. 'With'は入れ子にすることができますが、なぜこのコードで行うのか分かりません。 – June7

答えて

1
  1. あなたはPageFieldを扱っているので(つまり、フィルタペインにあり、それは未チェック「複数の項目を選択」を持つフィールド)をなし、Iドンフィルターをクリアする必要があると思います。しかし、私のアドバイス...ちょうどそこに残して...それは傷つけません。
  2. 単純に、コードにエラー処理を追加して、項目が存在しない場合はエラーを取り除くことが簡単にできます。単にエラーを無視したい場合は、On Error Resume Nextステートメントをコードブロックの上部に置きます。または、ピボットテーブルがフィルタされていないことをユーザーに通知することもできます。あなたが何をしたいのかを明確にしたら、コードスニペットを投稿します。
  3. これらの両方のピボットボックスが同じデータソースを共有する場合は、両方のキャッシュがキャッシュを共有するため、両方のキャッシュを更新する必要はありません。その場合は、2番目のリフレッシュラインを取り除くだけです。
  4. なぜカラムを隠しているのかを明確にすることはできますか?それは後で隠されないのですか?このコードを実行するたびに非表示になる可能性はありますか?
  5. これがあなたのコードがやっていることであれば、私はおそらくscreenupdatingをオフにしても構いません。しかし、再び、それは本当に重要ではありません。
+0

ありがとう、ジェフリー - これは素晴らしいです! :)(これは私のコードのほんの一部ですが、前に行った残りの部分はこれをチェックしたかったのです) – Mike

+0

あなたはほとんどすべての私の質問に答えました.3番目は素晴らしいことですソース)。私が確信しているのは、エラー処理だけです。私の場合、これは前週のカレンダーで毎週月曜日にフィルタリングされるので、ここでカバーしたい唯一のケースは、この特定の週番号で利用できるデータがない場合にメッセージボックスを表示することです。私はOn Error GoTo ErrMsgのようなものを考えていますが、この特定のエラーをどのようにカバーするかわかりません。 – Mike

関連する問題