Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] [VBA] Filtrowanie dat mniejszych od podanej daty excel 2013

gleoekn 26 Sep 2019 13:55 906 5
  • #1
    gleoekn
    Level 6  
    Witam,

    rok temu temu stworzyłem w miarę proste makro, które między innymi miało filtrować dane po datach mniejszych niż dziś+90 dni, później z wyfiltrowanych danych tworzyć tabele przestawną itd. Poniżej fragment mojego kodu

    Sheets("BAZOWA").Select
    Range("T1").Select
    ActiveCell.FormulaR1C1 = "=WORKDAY(TODAY(),90)"
    If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
    Range("A1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$R$" & LastRow).AutoFilter Field:=14, Criteria1:=">10", _
    Operator:=xlAnd
    ActiveSheet.Range("$A$1:$R$" & LastRow).AutoFilter Field:=11, Criteria1:=_
    "<=" & Range("T1"), Operator:=xlAnd

    Makro powstało jeszcze na wersji excel 2010 i wtedy działało bez zarzutu Ostatnio przesiadłem się na nowego windowsa i office 2013. Obecnie ten sam kod nie filtruje w ogóle według podanej daty (w wyniku nie dostaję żadnego wiersza choć takowe istnieją). W pewnym momencie odkryłem, że jeśli podmienię i podam na sztywno przeliczoną datę i to formacie amerykańskim to kod zadziała

    ActiveSheet.Range("$A$1:$R$" & LastRow).AutoFilter Field:=11, Criteria1:=_
    "<01/30/2020", Operator:=xlAnd



    Próbowałem więc zmienić format daty w kodzie

    range("T1").NumberFormat = "m/d/yyyy;@"

    albo wstawić zmienna

    Dim NewDate As Date
    NewDate = Format(DateAdd("d", 126, Date), "m/d/yyyy")

    i podstawić do kodu filtru

    ActiveSheet.Range("$A$1:$R$" & LastRow).AutoFilter Field:=11, Criteria1:=_
    "<" & NewDate, Operator:=xlAnd


    Żadna z tych opcji nie zadziała. Jedynie podanie sztywnej daty działa a to nie jest dla mnie rozwiązaniem. Czy ktoś z forumowiczów spotkał się z tym problemem i go rozwiązał?
  • #2
    PRL
    Level 40  
    Nie mam 2013. Próbowałeś zmieniać ustawienia regionalne?
  • #3
    clubs
    Level 37  
    A patrzyłeś tak
    Code: vbscript
    Log in, to see the code
  • #4
    gleoekn
    Level 6  
    @PRL
    Windows mam ustawiony na polski język i polski region. Sprawdzałem daty w kolumnie, która jest filtrowana i daty mają Nasz format i we właściwościach też jest że to ustawienia regionalne dla Polski.
    @clubs
    zapis w formacie mm/dd/yyyy nie zmienia nic dla zmiennej. Przy okazji przy tej operacji zauważyłem, że zmienna NewDate bez względu jaki format jej narzucę w kodzie i tak zwraca wersję dd/mm/yyyy....Da się napisać formułę w excelu żeby we wskazanej komórce uzyskać datę amerykańską 01/30/2019 ale gdy w kodzie podstawię tą komórkę to i tak się nie filtruje. Wpisanie daty na sztywno w kodzie (zamiast zmiennej/odwołania do komórki) oczywiście działa

    zmieniłem NewDate na string zamiast date i uzyskałem faktycznie żądany format ale filtrowania dalej nie działa
  • Helpful post
    #5
    Maciej Gonet
    VBA, Excel specialist
    Nie dałeś załącznika, więc nie ma na czym sprawdzić, ale jeśli problemem jest amerykański format daty, to zapis typu:
    Code: vbscript
    Log in, to see the code
    nic nie da, bo ukośnik jest interpretowany jako systemowy separator daty. Jeśli ma być faktycznie ukośnik, niezależnie od ustawień systemowych, to trzeba np. tak:
    Code: vbscript
    Log in, to see the code
  • #6
    gleoekn
    Level 6  
    dzięki Maciej Gonet, zmodyfikowałem kod o "\" i zadziałało choć dalej nie rozumiem dlaczego VBA potrzebował daty w formacie amerykańskim by przefiltrować kolumnę...