Vergleichen Datumsbereich von Excel VBA

AKTUALISIERT ANTWORT: fand ich eine Antwort auf meine Frage. Ich werde eine vereinfachte version unter der ursprünglichen Frage hier ist nur, um es einfach, mit einer detaillierteren version unten als die akzeptierte Antwort.

Schreibe ich eine VBA-Funktion zum filtern einer pivot-Tabelle, indem Sie einen Datumsbereich durch den Benutzer eingegeben werden. Für einige Grund, es ist nicht für die Rückgabe der Ergebnisse zu erwarten.

Die Daten, die verglichen werden in zwei verschiedene Datum-Formate. Der vom Benutzer eingegebene Daten sind im mmmm yyyy format (Oktober 2013). Wenn dieser Wert zog in das makro für den Vergleich, es ist richtig übersetzt, wie 10/1/2013. Die pivot-Tabelle-Termine sind im mmm JJ format (Oct 13). Wenn ich Anrufe auf dieses Datum mit dem code PivotItem.Value scheint es zu übersetzen, das Datum als Zeichenkette "Okt 13."

Ich kann nicht ganz herausfinden, was das makro tut, wie verhält es sich etwas erratisch. Wenn ich ihn von Oktober 2011 bis Oktober 2013, es gibt alle Monate von Januar bis September für jedes Jahr, 2008, 2009, 2010, etc. Wenn ich es für Juni 2013 bis Oktober 2013, gibt es von Juni bis September jedes Jahr. Darüber hinaus, in jedem Beispiel wird das makro weiter ausgeführt wird, über die maximale Reichweite der Daten in der pivot-Tabelle und erhält eine Fehlermeldung. Wenn ich debug, das makro versucht, um die Sichtbarkeit auf 'true' für ein Datum, das gar nicht existiert in der pivot-Tabelle (also für Januar 2014, wenn die Daten nur durch geht, Okt 2013). Keine Ahnung, warum das passiert.

Unten ist der code. Keine Einsicht würde sehr geschätzt werden.

UPDATE:

Also das problem ist definitiv das Datum-format. Wenn ich ändern Sie das Feld Einstellungen in der pivot-Tabelle, um das Datum in das format mm/dd/yyyy (10/1/2013), dann das makro funktioniert genau wie erwartet. Dies wäre eine einfache Lösung für das problem außer, dass die Tabelle ist die Fütterung ein Diagramm gesehen in der Benutzer-dashboard, das würde ich wirklich wie in das format mmm JJ, da sieht es viel sauberer. Gibt es eine einfache Möglichkeit, konvertieren Sie das format mm/dd/yyyy innerhalb der Makros für den Vergleich, dann zurück auf das gewünschte format einmal komplett?

Und ich würde immer noch gerne verstehen, warum ein anderes Datum-format ist wieder so unterschiedliche Ergebnisse, wenn die raw-Daten verglichen, ist die gleiche, und beide sind formatiert als Termine, nicht, wie Datum vs text oder so etwas.

Sub filterPivotDate(pt As PivotTable, strtDate As Date, endDate As Date)

Dim pf As PivotField
Dim pi As PivotItem

'Clear current date filter
Set pf = pt.PivotFields("Date")
pf.ClearAllFilters

'Set new date filter
For Each pi In pf.PivotItems
    If pi.Value >= strtDate And pi.Value <= endDate Then
        pi.Visible = True
    Else
        pi.Visible = False
    End If
Next pi

end sub

ANTWORT UPDATE:
Ich ersetzte die Schleife war ich mit den filter setzen mit der folgenden code-Zeile:

pf.PivotFilters.Add Type:=xlDateBetween, Value1:=strtDate, Value2:=endDate

Diese das Problem gelöst, ich hatte Probleme mit dem Datumsformat. Mehr Informationen in der akzeptierten Antwort unten, sowie an diese website

InformationsquelleAutor Trevor Eyre | 2013-11-05
Schreibe einen Kommentar