14. marts 2023 - 12:23Der 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
Du skal ikke kun vide, hvordan du bruger AI til at styrke IT-sikkerheden – men også hvordan IT-kriminelle anvender teknologien mod din virksomhed.
23. april 2025
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.
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.
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:
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.
Nu må vi snart have det uland til at følge gængse logikker :-)
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
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.