04. november 2014 - 08:44Der 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.
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.
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.
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
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.
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.