Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AutoFiltr w VBA - źle wyszukuje daty

m4xon 14 Lis 2017 12:19 375 6
  • #1 14 Lis 2017 12:19
    m4xon
    Poziom 15  

    Cześć,

    Potrzebuję podpowiedź z następującym problemem. Mianowicie chodzi o wyszukiwanie danych na podstawie daty. Potrzebuję w bazie danych usunąć wszystkie wiersze, których daty są wyższe niż wprowadzona przez użytkownika. Kolumna dat ma format dd/mm/yyyy, natomiast gdy używam poniższego kodu to nie wyszukuje mi nic, lecz gdy wejdę manualnie zobaczyć co makro wprowadziło w Excela to mam wybrane jak należy np "is after 13/11/2017" i jak wtedy kliknę OK to mi wyrzuci rezultaty prawidłowo. Nie do końca rozumiem co jest przyczyną.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Wiem, że mogę zastosować pętle jak poniżej

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    ale w przypadku 10 000 linii to nie będzie dość wydajne?


    Dzięki za pomoc

    0 6
  • Pomocny post
    #2 14 Lis 2017 14:15
    JacekCz
    Poziom 33  

    Excel co do typu datowego ma czasem dobre domniemania, czasem złe. Bezpośrednia pochodna tego, ze ma być "user friendly".
    Nie wszystko co widzisz jako datę, nią jest. Pole nie masz w rzeczywistości stringowe, zaczęte od apostrofu?

    Zgaduję: wprowadzenie wyrażenia narzuca interpretację datową?

    Na marginesie myślę, że od dawna potrzebujesz bazy danych

    0
  • #3 14 Lis 2017 21:37
    m4xon
    Poziom 15  

    JacekCz jak to ogarnąć? Plik codziennie generuję z aplikacji i czy mogę go jakoś ogarnąć sformatować żeby to wszystko działało jak należy czy też lepiej przekonwertować na tekst wszystkie daty wtedy filtrowanie będzie skuteczne.

    0
  • #4 15 Lis 2017 09:26
    kinggustav
    Poziom 18  

    Porównywanie tekstu będzie działało, ale przy okazji musisz zmienić format daty na yyyy/mm/dd. Inaczej będzie problem z ustaleniem kolejności dat.
    Proponuję wykonać trochę testów na tych pozycjach, które źle działają. Sprawdź czy te porównywane daty są zamieniane na takie same liczby. Pewnie nie są jeżeli są niezgodne, ale liczbę możesz przekonwertować znowu na datę w znanym formacie i zobaczysz jaka ona jest.

    0
  • #5 15 Lis 2017 09:40
    adamas_nt
    Moderator Programowanie

    Data, jak już wspomniał JacekCz, to bardzo krnąbrny element Excel'a.
    Dla pewności, zamiast InputBox'a, podstawiłbym kalendarz.
    Wtedy bez względu na ustawienia w systemie, w arkuszu wyląduje Ci data. Pozostaje tylko sformatować komórki "dla oka".

    0
  • #6 15 Lis 2017 16:05
    lanzul
    Poziom 21  

    m4xon napisał:
    gdy używam poniższego kodu to nie wyszukuje mi nic

    Pamiętaj, że 'InputBox' zwraca wartości typu "String", zaś 'Format' zwraca "Variant" w podtypie "String". Nie wymuszaj więc na "biedulce Inputowej" ... :) ... typu "Date", bo jak każda "kobieta" się po prostu "obrazi". Dodatkowo to "sprawka" '.Atofilter'a także.
    Jeśli szukasz "dokładnie danej daty" (czyli = "jakaś data"), to zawsze zmienna wpisywana do filtra musi być typu "Date", ale po angielsku, tj. "mm/dd/yyyy", czyli najpierw Format, a potem CDate().
    Natomiast, jeśli szukasz daty "z zakresu", to zostawiasz typ "String".
    Przykłady:
    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Kod: vba
    Zaloguj się, aby zobaczyć kod

    Dodatkowo, rzutować tu bardzo mogą ustawienia daty systemowej, u mnie jest "dd-mm-rrrr" i powyższe działa. Jeśli masz coś innego u siebie, to trochę musisz "potestować", jeśli działać nie będzie.

    0
  • #7 27 Lis 2017 21:00
    m4xon
    Poziom 15  

    najlepsze jest to, że gdy chcę usunąć jakieś daty z tabeli i puszczę to pętlą to działa prawidłowo, kwestia dat w vba jest naprawdę dziwna.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo