Avatar billede Alex5358 Novice
09. april 2018 - 09:23 Der er 37 kommentarer

Hjælp til VBA

Hej eksperter.
Jeg har et problem med VBA jeg ikke kan løse.
Jeg har opgivet dato som tekst i fomat yymmdd. Og ønsker at konvertere dette til ddmmyyyy (dansk format). Hvordan får jeg lavet et system der kan tage fra første entry til sidste entry  fra d2 til sidste entry) og konvertere det til en ny søjle (e2 og ned til sidste). Systemet skal kunne køre kunne håndtere der bliver tilføjet datoer gennem tiden.

VH Alex
Avatar billede kim1a Ekspert
09. april 2018 - 09:42 #1
Hej Alex

Jeg har før med succes brugt funktionen date i vbaen, Arbejder du med kolonnen udover denne udfordring?

Det jeg spørger om, er skal du have en komplet løsning, eller har du f.eks. allerede har styr på loop mv.?
Avatar billede Alex5358 Novice
09. april 2018 - 09:44 #2
Hej Kim. Jeg har siddet og prøvet alt muligt med uden noget endeligt...
Det ville være fantastisk hvis du kunne skrive et system til mig.

Vh Alex
Avatar billede Alex5358 Novice
09. april 2018 - 09:47 #3
Yderligere fik jeg ikke skrevet at systemet selfølgelig skal kunne tjekke om datoen til at starte med i d2 og ned er "forkert" format og derfor skal konvertere det.
Avatar billede finb Ekspert
09. april 2018 - 10:37 #4
Utestet:
=day(cdate(yymmdd)) & month(cdate(yymmdd)) & year(cdate(yymmdd))
Avatar billede Alex5358 Novice
09. april 2018 - 10:45 #5
Den forstår jeg ikke finb.
Der skal laves en sub/function i vba der kan klare opgave.
Avatar billede kim1a Ekspert
09. april 2018 - 12:01 #6
Jeg ligger mig op ad finb, dermed også utestet:

Sub test()

Dim DatDato As Date
Dim intRow As Integer
Dim intNumRows As Integer

intNumRows = Range("D1", Range("D1").End(xlDown)).Rows.Count

ScreenUpdating = False
For intRow = 1 To intNumRows
Cells("E" & intNumRows).Value = Day(CDate(yymmdd)) & Month(CDate(yymmdd)) & Year(CDate(yymmdd))

Next intNumRows

End Sub
Avatar billede kim1a Ekspert
09. april 2018 - 12:08 #7
Hov - det var da noget vås - øjeblik
Avatar billede kim1a Ekspert
09. april 2018 - 12:56 #8
Sub test()

Dim DatDato As Date
Dim intRow As Integer
Dim intNumRows As Integer

intNumRows = Range("D1", Range("D1").End(xlDown)).Rows.Count

ScreenUpdating = False
For intRow = 1 To intNumRows
DatDato = Cells("D" & intNumRows).Value
Cells("E" & intNumRows).Value = Day(DatDato) & Month(DatDato) & Year(DatDato)

Next intNumRows

End Sub
Avatar billede Alex5358 Novice
09. april 2018 - 14:19 #9
Hej Kim.

Når jeg anvender Sub´en siger den således.
"Der opstod en kompileringsfejl:
Referencen til en Next-kontrolvariabel er ugyldig"
Avatar billede kim1a Ekspert
09. april 2018 - 23:41 #10
Ja, der er nok lidt for mange tåbeligheder, dumt at lave den på arbejde :-)

Tror jeg fik den rettet nu:

Sub test()

Dim DatDato As Date
Dim intRow As Integer
Dim intNumRows As Integer

intNumRows = Range("D1", Range("D1").End(xlDown)).Rows.Count

ScreenUpdating = False
For intRow = 1 To intNumRows
DatDato = Cells("D" & intRow).Value
Cells("E" & intRow).Value = Day(DatDato) & Month(DatDato) & Year(DatDato)

Next intRow

End Sub
Avatar billede Alex5358 Novice
10. april 2018 - 08:20 #11
Nu kommer der en fejl ved:
ScreenUpdating = False

"Der opstod en kompileringsfejl:
Variablen er ikke defineret"
Avatar billede kim1a Ekspert
10. april 2018 - 09:02 #12
Der mangler application. foran
Avatar billede Alex5358 Novice
10. april 2018 - 10:10 #13
Så sker der fejl i
DatDato = Cells("D" & intRow).Value
"fejl 5: Procedure kaldet eller argumentet er ugyldigt"
Avatar billede kim1a Ekspert
10. april 2018 - 17:07 #14
Nu tvang du mig til at teste det - troede du selv kunne lidt :-)

Sub test()

Dim DatDato As Date
Dim intRow As Integer
Dim intNumRows As Integer

intNumRows = Range("D1", Range("D1").End(xlDown)).Rows.Count

Application.ScreenUpdating = False
For intRow = 1 To intNumRows
DatDato = Range("D" & intRow).Value
Range("E" & intRow).Value = Format(Right(DatDato, 2) & "-" & Left(Right(DatDato, 4), 2) & "-" & Left(DatDato, 2), "DD-MM-YYYY")

Next intRow

End Sub
Avatar billede Alex5358 Novice
10. april 2018 - 17:46 #15
Pisse fedt!
Det virker næsten.
nu konvertere systemet til datoer men ikke alle steder.
Der kommer lange sekvenser hvor den ikke konvertere noget som helst. og efter den sidste aktive celle der står noget i så skriver den bare 00-00-00 derned ad.
Avatar billede kim1a Ekspert
10. april 2018 - 18:40 #16
Er der ophold i din liste i kolonne D? Måske data langt ned?
Avatar billede Alex5358 Novice
10. april 2018 - 18:45 #17
Nej ingen af tingen. selv hvis jeg taget et helt nyt sæt data sker det stadig ..
Avatar billede kim1a Ekspert
10. april 2018 - 22:56 #18
Det giver ikke mening. VBAen tæller hvormange celler med indhold der er i kolonne D og tager derefter række for række fra 1 til det tal den når til og arbejder igennem. Det er klart hvis der er tomt i enkelte celler i D så vil den skrive 00-00-00. Du bliver nødt til at uploade det et sted for at vi kan fejlsøge - det virker fint hos mig.
Avatar billede Alex5358 Novice
10. april 2018 - 23:02 #19
suben viser ingen fejl. dog kan jeg konstatere der er en fejl et sted eftersom når den bliver eksekveret gør den det ikke for alt plus den fortsætter med 00-00-00.
04-03-15   
11-09-01   
15-09-01   
16-02-01   
17-09-01   
17-09-01   
17-02-01   
16-09-01   
10-09-01   
17-09-01   
13-09-01   
16-09-01   
15-09-01   
17-09-01   
15-02-01   
14-09-01   
16-09-01   
17-09-01   
16-09-01   
16-09-01    01-09-2016
16-09-01    01-09-2016
17-09-01    01-09-2017
15-09-01    01-09-2015
16-09-01    01-09-2016
15-09-01    01-09-2015
17-09-01    01-09-2017
16-09-01    01-09-2016
15-09-01    01-09-2015
16-09-01   
17-09-01
Avatar billede Alex5358 Novice
10. april 2018 - 23:03 #20
fra at en ikke konvertere noget som ovenstående til den gør det igen så er vi 2000 rækker nede i arket.
Avatar billede kim1a Ekspert
10. april 2018 - 23:19 #21
Hvad kender du til vba? Kan du prøve at løbe den igennem via F8 og se hvilket tal den tæller til intNumRows?

Du kan også vælge i immidiate og skrive
?Range("D1", Range("D1").End(xlDown)).Rows.Count og så se hvad den skriver.

Derudover er det meget mystisk at den efterlader noget tomt, men jeg bemærker nu at du skriver D som YY-MM-DD og ikke YYMMDD som du skrev i første indlæg. Det ændrer jo på den måde jeg har skrevet hvordan den skal fange hver del på.
Avatar billede Alex5358 Novice
10. april 2018 - 23:45 #22
Ved at skrive
Range("D1", Range("D1").End(xlDown)).Rows.Count
I immidiate vinduet skriver den:
"Der opstod en kompileringsfejl:
Brugen af egenskaben er ugyldig"
Avatar billede Alex5358 Novice
10. april 2018 - 23:48 #23
hvis jeg der imod skriver
?Range("D1", Range("D1").End(xlDown)).Rows.Count
får jeg
18287 (rows)
Avatar billede kim1a Ekspert
12. april 2018 - 07:46 #24
Godt så, Excel læser dit dokument som om du har 18287 rækker i dit ark - er det også tilfældet som du ser det?
Avatar billede Alex5358 Novice
12. april 2018 - 11:32 #25
Ja det stemmer med hvad der er når jeg selv ser efter
Avatar billede kim1a Ekspert
12. april 2018 - 12:57 #26
Så langt så godt. Derfor skulle den også arbejde ned til bund. Udfordringen er så denne del:
Derudover er det meget mystisk at den efterlader noget tomt, men jeg bemærker nu at du skriver D som YY-MM-DD og ikke YYMMDD som du skrev i første indlæg. Det ændrer jo på den måde jeg har skrevet hvordan den skal fange hver del på.

Jeg tror som sagt det vil være nemmest hvis du kan anonymisere data og sende mig et eksempel. Skriv evt. din mail i en besked så kan vi tage den der.
Avatar billede Sara9 Juniormester
17. maj 2018 - 00:43 #27
Hej

Jeg har samme opgave og har prøvet at skrive det ind i VBA, men den siger "Run-time error '13' : Type mismatch" og derefter markerer dette:

DatDato = Range("D" & intRow).Value

Har skrevet præcis som #14
Avatar billede kim1a Ekspert
17. maj 2018 - 20:09 #28
Har du defineret intRow? Du skal have det hele med:

For intRow = 1 To intNumRows
DatDato = Range("D" & intRow).Value
Range("E" & intRow).Value = Format(Right(DatDato, 2) & "-" & Left(Right(DatDato, 4), 2) & "-" & Left(DatDato, 2), "DD-MM-YYYY")
Next intRow

Du kan evt. bruge intRow = 1 To 100 hvis du ikke vil definere antal gentagelser som dynamisk.
Avatar billede Sara9 Juniormester
19. maj 2018 - 15:56 #29
Har skrevet præcis det sammen, men gider stadig ikke. Mine tal starter fra D2 til D18287. Dog skal de rigtige datoer stadig være i sølje D.
Avatar billede kim1a Ekspert
19. maj 2018 - 16:39 #30
Den her læser tal i D kolonnen og sætter dem ind i E.

Kan du prøve at "steppe" i makroen? F8 bruger man, så tager den en linje ad gangen og du kan læse hvilke variabler den bruger, herunder hvordan datDato ser ud og om den fanger intNumRows. Fortæl os hvad de to værdier er når du stepper.
Avatar billede Sara9 Juniormester
19. maj 2018 - 22:12 #31
IntNumRows=18288
DatDato=00:00:00
Avatar billede kim1a Ekspert
20. maj 2018 - 09:56 #32
Så det er datoen den er galt med. Har du kolonne overskrifter? Måske den ikke skal starte med intRow = 1, men 2?
Det kan også være at dine data i kolonne D har et format der ikke matcher hvad vbaen er sat op til. Prøv at vise starten af kolonne D - bare de første 5-7 rækker.
Avatar billede Sara9 Juniormester
20. maj 2018 - 11:52 #33
Ja har kolonne overskrifter, som sagt starter min fra D2. Har også prøvet at rette det uden held.

04-03-15
11-09-01
15-09-01
16-02-01
17-09-01
17-09-01
Avatar billede kim1a Ekspert
20. maj 2018 - 16:00 #34
Du skal nok lave DatDato om til en string, ser ud til at dine data ikke opfører sig på samme måde som de tidligere.
Avatar billede Sara9 Juniormester
20. maj 2018 - 16:44 #35
Tak for hjælpen det hjalp, dog skriver den det lidt mærkeligt op. Jeg skal have det DD-MM-YYYY, og den skriver det sådan:

15-3--04
01-9--11
01-9--15
01-2--16
01-9--17
01-9--17
01-2--17
Avatar billede kim1a Ekspert
20. maj 2018 - 19:41 #36
Ja, for den forstår ikke dit input - dine data ser ikke ud til at være registreret som datoer.

Du skal ud i en anden løsning a la denne (utestet)
Range("E" & intRow).Value = Format(Right(DatDato, 2) & "-" & Mid(DatDato, 4,2) & "-" & Left(DatDato, 2), "DD-MM-YYYY")

Jeg ved ikke hvordan dine oprindelige data vender, så det kan være det skal vende omvendt - er du med på hvad der sker?
Avatar billede Sara9 Juniormester
20. maj 2018 - 19:48 #37
Yes det hjalp tusind tak for hjælpen. :)
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