Avatar billede kim1a Ekspert
14. marts 2023 - 12:23 Der er 4 kommentarer og
1 løsning

VBA filter på dato driller

Jeg har en liste (ikke tabel) med en række kontrakter. De udløber på forskellige tidspunkter. Jeg vil gerne filtrere på en dato jeg vælger med vba (der skal mere til, men dette første skridt driller).

Udfordringen er at den ikke opfatter filteret korrekt i vba, selvom det placerer sig på den korrekte måde i filteret i selve listen. Altså, jeg kører vba den finder ingen, jeg går ind i filteret i den pågældende kolonne, ser den har valgt date filter og trykker jeg nu ok uden at ændre i det, så filtrerer den korrekt.

Jeg har forsøgt om det er min dato der skulle stå som string fremfor date, men min kode ser således ud:

Sub oversigt_udloeb()

Dim shtOversigt As Worksheet ' fanen min liste er i
Dim intOverskriftSlutdato As Integer ' tal for kolonnen der skal filtreres på
Dim dteUdløbsdato As Date
Dim strUdløbsdato As String

Datoinput: dteUdløbsdato = Format(InputBox("From which date should the overview depict?", "Dato", "DD-MM-ÅÅÅÅ"), "DD-MM-YYYY")
    If IsDate(dteUdløbsdato) Then

    Else: MsgBox ("Not correct date format"): GoTo Datoinput
    End If

strUdløbsdato = dteUdløbsdato ' var blot et forsøg, den opfører sig på samme måde
    Set shtOversigt = ThisWorkbook.Sheets("Oversigt")
   
    shtOversigt.Activate
    intOverskriftSlutdato = Application.WorksheetFunction.Match("End / First possible termination", Range("A2:EE2"), 0)

' filter on selected date
    shtOversigt.Rows("2:2").Select
    Selection.AutoFilter Field:=intOverskriftSlutdato, Criteria1:="<=" & strUdløbsdato

end sub
Avatar billede Slettet bruger
14. marts 2023 - 13:06 #1
Det ser ud til, at dit VBA-script fungerer korrekt, og formateringen af datoen ser også korrekt ud. Det kan muligvis være et problem med filtrene og sortering i Excel, der påvirker dit script. Du kan prøve at ændre din kode for at deaktivere filtrene, anvende dit filter og derefter reaktivere filtrene igen. Det kan gøres ved at indsætte følgende linjer før og efter dine filterlinjer:

Sub oversigt_udloeb()

Dim shtOversigt As Worksheet ' fanen min liste er i
Dim intOverskriftSlutdato As Integer ' tal for kolonnen der skal filtreres på
Dim dteUdløbsdato As Date
Dim strUdløbsdato As String

Datoinput: dteUdløbsdato = Format(InputBox("From which date should the overview depict?", "Dato", "DD-MM-ÅÅÅÅ"), "DD-MM-YYYY")
If IsDate(dteUdløbsdato) Then

vbnet:

Else: MsgBox ("Not correct date format"): GoTo Datoinput
End If

strUdløbsdato = dteUdløbsdato ' var blot et forsøg, den opfører sig på samme måde
Set shtOversigt = ThisWorkbook.Sheets("Oversigt")

shtOversigt.Activate
intOverskriftSlutdato = Application.WorksheetFunction.Match("End / First possible termination", Range("A2:EE2"), 0)

' Deaktiver filtre før filtrering
If shtOversigt.AutoFilterMode Then shtOversigt.AutoFilterMode = False

' Filter på valgt dato
shtOversigt.Range("A2:EE2").AutoFilter Field:=intOverskriftSlutdato, Criteria1:="<=" & strUdløbsdato

' Reaktivér filtre efter filtrering
If shtOversigt.AutoFilterMode = True Then
shtOversigt.AutoFilterMode = False
shtOversigt.AutoFilterMode = True
Else
shtOversigt.AutoFilterMode = True
End If

End Sub

Dette script deaktiverer filtrene i arkfanen "Oversigt", anvender dit filter og derefter reaktiverer filtrene. Dette skulle hjælpe med at sikre, at dit filter fungerer korrekt, og at du kan se resultaterne korrekt i dit Excel-ark.
Avatar billede Slettet bruger
14. marts 2023 - 13:07 #2
Jeg håber, at dette hjælper. 🙃

Jeg hopper af her 👍
Avatar billede kim1a Ekspert
14. marts 2023 - 13:53 #3
Jeg satte dette ind sidst i makroen:
If shtOversigt.AutoFilterMode = True Then
shtOversigt.AutoFilterMode = False
shtOversigt.AutoFilterMode = True ' her melder den fejl
Else
shtOversigt.AutoFilterMode = True
End If

jeg forsøgte efterfølgende med at starte min kode med at slå filter fra, men uden det gav en forskel.
Avatar billede Tom K. Forsker
31. marts 2023 - 08:28 #4
Det kan være, at problemet skyldes, at Excel forventer, at datoer i filterkriterierne skal være i US-format (mm/dd/yyyy) i stedet for den europæiske format (dd/mm/yyyy). Du kan forsøge at ændre formatet på din strUdløbsdato ved at bruge Format() funktionen som følger:

strUdløbsdato = Format(dteUdløbsdato, "mm/dd/yyyy")

Dette vil formatere din dteUdløbsdato til US-format, som Excel forventer, og derefter kan du bruge strUdløbsdato i dit filterkriterium. Prøv at opdatere din kode til dette og se, om det løser dit problem.
Avatar billede kim1a Ekspert
31. marts 2023 - 09:59 #5
Ja - der var den. Tak.

Nu må vi snart have det uland til at følge gængse logikker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester