2016-11-15 45 views
0

ユーザーが別のワークシート(コントロール)に入力した日付に基づいてブック内の既存のピボットテーブル( 'ピボット'ワークシートのPivotTable1)をフィルタする必要があります。私は、コントロールシートのセルには、セル内でのみ日付を強制するためのデータ検証があることを追加する必要があります。私がこれまで持っているコードは、このです:ピボットテーブルの日付フィルタ問題(有効な日付ではない)

Sub FilterPivotfromCell() 

Dim Invoice_Start_Date As Date 
Dim Invoice_End_Date As Date 

Invoice_Start_Date = CDate(Worksheets("Control").Cells(3, "E").Value) 

Invoice_End_Date = CDate(Worksheets("Control").Cells(3, "G").Value) 

Sheets("Pivot").Select 

MsgBox IsDate(Invoice_End_Date) 
MsgBox IsDate(Invoice_Start_Date) 

ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh 
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters 
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add _ 
Type:=xlDateBetween, Value1:=Invoice_Start_Date, Value2:=Invoice_End_Date 

End Sub 

F8を使用してコードをステップ実行、および変数Invoice_Start_DateとInvoice_End_Date、日付をされた変数へのすべてのポイント(タイプは、ウォッチウィンドウで日付として示し上の時計と、isdateメッセージボックスが両方のインスタンスで 'True'として返されますが、ピボットテーブルがフィルタリングされている部分が来るとすぐにマクロを実行すると、 'Run-time error'というメッセージが表示されます。 :入力した日付が有効な日付ではありません。もう一度やり直してください。 '

この問題は、過去にこの問題を抱えていたことがわかっているように、イギリスの地域設定を行うことと関係しているのでしょうか。

また、E3のセル内容は01/10/2016であり、G3のセル内容は31/10/2016です。

編集:私は提案hereに従ってみましたが、違いはありませんでした。私のピボットテーブルのソースにはブランク行も含まれていますが、私はデータだけに制限しようとしましたが、違いはありません。

編集2:まあ、あなたはそれを知っていませんか?もう少しグーグルで解決策を思いついたhere。基本的に、ピボットフィルタの日付の周りにclng形式を追加すると、このトリックが完了しましたか?

+0

だけで、よりクリーンで効果的なコードを持っている、あなたは 'そして'設定しPvtTbl = ActiveSheet.PivotTables(「PivotTable1」)に設定し、Pivo​​tTable'として点心PvtTbl 'のようなピボットテーブルを宣言することができ、以降のことができます'PvtTbl.PivotCache.Refresh'などを使用するか、' With PvtTbl'を使用して –

+0

@ShaiRadoの下にあるすべてのコマンドをネストすることができます - ありがとう、私は今これを行うために自分のコードを整理しました。 – bawpie

答えて

0

これは、questionの@ MP24で提供された回答に続いて、改訂された作業コードです。

Sub FilterPivotfromCell() 

Dim Invoice_Start_Date As Date 
Dim Invoice_End_Date As Date 


Invoice_Start_Date = CDate(Worksheets("Control").Cells(3, "E").Value) 

Invoice_End_Date = CDate(Worksheets("Control").Cells(3, "G").Value) 

Sheets("Pivot").Select 

MsgBox IsDate(Invoice_End_Date) 
MsgBox IsDate(Invoice_Start_Date) 


ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh 
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters 
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add _ 
Type:=xlDateBetween, Value1:=CLng(Invoice_Start_Date), Value2:=CLng(Invoice_End_Date) 

End Sub