Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 0
  • 1

Mam problem z funkcjonowaniem kodu VBA, który ma za zadanie wstawić dwie dane kryteriów w narzędziu Excela „Filtry liczb” – „Między …”.

Kod najpierw rejestrowałem nagrywając go, a potem modyfikowałem ręcznie do stanu jak niżej.

Jak wpiszę w kodzie (do Criterial1 i  Criterial2) dane liczbowe np. Criteria1:=">=33", to działa, ale jak chcę wykorzystać zmienne, to nie działa.

Gdzie popełniam błąd? 

Pozdrawiam!

Poniżej mój kod:

Sub proba()

Dim szerokosc As Long
Dim szerokosc_P As Long
Dim szerokosc_M As Long




szerokosc = Range("L6").Value


szerokosc_P = szerokosc + 1
szerokosc_M = szerokosc - 1



Application.Goto Reference:="Lista_tel"
Range("Lista_tel[[#Headers],[Szer.]]").Select
ActiveSheet.ListObjects("Lista_tel").Range.AutoFilter Field:=12, Criteria1 _
:=">=szerokosc_M", Operator:=xlAnd, Criteria2:="<=szerokosc_P"


End Sub

 

 

Załączniki

  • jpg

    Filtrowanie_1.JPG ( 49K )
  • jpg

    Filtrowanie_2.JPG ( 34K )
Tadeusz_Kasprzak
  • Zapytał
  • @ Tadeusz_Kasprzak | 29.01.2018
    • 9
    • 4
    • 11

Odpowiedzi (2)

  • 2

Kompilator wartości w cudzysłowach traktuje jako zwykły tekst, nie zamienia go na wartości przechowywane w zmiennych. Musisz użyć takiej składni:

Criteria1:=">=" & szerokosc_M, Operator:=xlAnd, Criteria2:="<=" & szerokosc_P

Przy okazji: dwa poprzednie kroki (Application.Goto i Range.Select) są zbędne w Twoim kodzie. Rejestrator makr ma to do siebie, że zapisuje masę nadmiarowych rzeczy, które często przydają się do namierzenia jakiegoś obiektu, metody czy składni polecenia, ale w docelowym kodzie jedynie wydłużają jego działanie lub powodują niepotrzebne skakanie po arkuszach. "Selecty" są tu najlepszym przykładem, bo rejestrator pcha je praktycznie w co drugą linijkę, a w praktyce to jedna z metod, którą warto jak najszybciej wykluczyć ze swojego repertuaru. :)

Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 29.01.2018
    • 1
    • 7
    • 1
Komentarze
Dziękuję bardzo serdecznie ! Wszystko zaczęło działać.
Skomentował : @ Tadeusz_Kasprzak ,30.01.2018
  • 9
  • 4
  • 11
  • 1

Pan Mirek dał właściwą odpowiedź. Można tylko dodać, że filtrowanie z poziomu kodu jest dość uciążliwe i często da się zastąpić innymi metodami, np. użyciem SUMIF(S) z poziomu kodu czy pobieraniem podzakresu spełniającego kryteria do własnej zmiennej typu Range

  • Odpowiedział
  • @ | 29.01.2018
  • TRENER ALTKOM AKADEMII
Komentarze
Także dziękuję! Na razie wykorzystam pomoc Pana Mirka, bo to jeszcze leży w zakresie moich umiejętności, a później będę eksperymentował. Pozdrawiam!
Skomentował : @ Tadeusz_Kasprzak ,30.01.2018
  • 9
  • 4
  • 11