Avatar billede kim1a Ekspert
04. november 2014 - 08:44 Der er 6 kommentarer og
1 løsning

VBA mystik ved filter

Jeg har lavet min egen hjemmebryggede VBA som filtrerer i tabel over solgte enheder og kopierer til nyt ark.

Udfordringen er at den indsætter ikke en bestemt variabel korrekt. Eller rettere, den indsætter korrekt, men forstår ikke - eller rettere, den forstår ikke når den selv indsætter. Forklaring følger.

Variablen defineres således:
Datoinput:        Dato = Format(InputBox("Hvilken dato skal lageret opgøres efter", "Dato", "DD-MM-ÅÅÅÅ"), "DD-MM-YYYY")
    If IsDate(Dato) Then
    IndeværendeÅr = Year(Dato)
    IndeværendeMåned = Month(Dato)
    IndeværendeDag = Day(Dato)
        MSG1 = MsgBox("Skal lageret filtreres til månedsafslutning?", vbYesNo, "lagerfilterdato")
        If MSG1 = vbYes Then
            If IndeværendeMåned + 1 = 13 Then
            LagerFilterdato = Format("01-01-" & IndeværendeÅr + 1, "DD-MM-YYYY")
            Else: LagerFilterdato = Format("01-" & IndeværendeMåned + 1 & "-" & IndeværendeÅr, "DD-MM-YYYY")
        End If
        Else: LagerFilterdato = Format(Dato, "DD-MM-YYYY")
    End If
    Else: MsgBox ("Ikke rigtig datoformat"): GoTo Datoinput
    End If

Så jeg får en variabel "LagerFilterdato" som f.eks. er 31-10-2014

Den bruger jeg så senere således:

' Filtrer til lager
        Rows("2:2").Select
        Selection.AutoFilter Field:=Lagerind, Criteria1:="<" & Format(LagerFilterdato, "dd-mm-yyyy") 'Filtrerer på lager ind dato

Det der så sker er at filtreringen tager alle enheder væk. Det skaber så en fejl når jeg vil kopiere filtreringen over. Jeg stopper derfor makroen via debug. Går over i master dokumentet og ser at filtreringen er forstået.

Jeg går i filtreringen og ser at den har sat det som "date filters" og skrevet datoen korrekt. Jeg skal egentlig blot gå ind og sige ok igen, så dukker min data op.

Jeg forsøgte at rense tabellen for at kunne genskabe problemet jeg kan ligge ud på gupl, men det er ikke muligt uden at den ændrer fra "date filter" til tekstfiler. Så jeg håber I forstår min udfordring, eller evt. har et par løsningsforslag.

Jeg er meget forundret over at den læser det hele korrekt, men alligevel ikke filtrerer korrekt.
Avatar billede oleelo Nybegynder
16. november 2014 - 09:05 #1
Hej kim1a
Har du sikret dig at dine dato'er i Excel ligger som datoer og ikke som tekst.

Dit problem er at når du laver dit filter indsætter du dette kritere "< 31-10-2014" som excel opfatter som "tekst" og ikke dato. Prøv i stedet at indsættes kriteret som en dato værdi altså "< 41943" så tror jeg det virker.

mvh oleelo
Avatar billede kim1a Ekspert
17. november 2014 - 10:28 #2
Hej oleelo

Nej desværre. Jeg har defineret variablerne som dato, og som skrevet forstår den også tingene korrekt. Når jeg går ind i debug, hopper over i mit arks master faneblad gør jeg blot det at jeg finder kolonnen hvor den skal filtrere og trykker så-at-sige bare "ok" igen og derpå filtrerer den korrekt.
Jeg vil dog overveje dit forslag med at ændre det til værdi som Excels datoformat (41943 f.eks.) - men jeg er bange for at dataudtrækket er defineret på anden vis, så det slet ikke virker.
Avatar billede oleelo Nybegynder
18. november 2014 - 16:12 #3
Hej
Det er simpelt at teste og det burde intet betyde for dine data.
I linjen: Selection.AutoFilter Field:=Lagerind, Criteria1:="<" & Format(LagerFilterdato, "dd-mm-yyyy")  skriver du bare "Criteria1:="<41943")i stedet for Criteria1:="<" & Format(LagerFilterdato, "dd-mm-yyyy"). Fordelen ved at bruge dataværdien er at du slipper for at tænke på formater.
hilsen oleelo
Avatar billede kim1a Ekspert
18. november 2014 - 16:33 #4
Men som du ser øverst, har jeg jo brug for at kunne definere datoen via en inputbox - så det er vel her jeg skal gøre noget for at ændre formatet?
Jeg er med på at jeg for en enkelt test kan lave et nummer, men for at det virker efter hensigten er det variablen der bliver nødt til at bruges som input.
Avatar billede oleelo Nybegynder
18. november 2014 - 19:08 #5
Hej
prøv følgende:

Du skal først have defineret dine data

Dim LagerFilterdato As Date
Dim TilFilter As String  ' ny


TilFilter = "<" & CLng(LagerFilterdato)


TilFilter sættes nu i dit filter

mvh oleelo
Avatar billede kim1a Ekspert
21. november 2014 - 15:22 #6
Hej oleelo

Det virker dejligt efter hensigten - så det var en lille nem omvej. CLng er en tand over mit niveau, men skønt med en løsning.

Smid et svar.
Avatar billede oleelo Nybegynder
21. november 2014 - 17:20 #7
Hej
Dejligt, her er et svar
mvh oleelo
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