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
kim1a Professor
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.?
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
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.
finb Ekspert
09. april 2018 - 10:37 #4
Utestet:
=day(cdate(yymmdd)) & month(cdate(yymmdd)) & year(cdate(yymmdd))
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.
kim1a Professor
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
kim1a Professor
09. april 2018 - 12:08 #7
Hov - det var da noget vås - øjeblik
kim1a Professor
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
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"
kim1a Professor
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
Alex5358 Novice
10. april 2018 - 08:20 #11
Nu kommer der en fejl ved:
ScreenUpdating = False

"Der opstod en kompileringsfejl:
Variablen er ikke defineret"
kim1a Professor
10. april 2018 - 09:02 #12
Der mangler application. foran
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"
kim1a Professor
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
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.
kim1a Professor
10. april 2018 - 18:40 #16
Er der ophold i din liste i kolonne D? Måske data langt ned?
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 ..
kim1a Professor
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.
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
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.
kim1a Professor
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å.
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"
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)
kim1a Professor
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?
Alex5358 Novice
12. april 2018 - 11:32 #25
Ja det stemmer med hvad der er når jeg selv ser efter
kim1a Professor
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.
Sara9 Novice
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
kim1a Professor
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.
Sara9 Novice
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.
kim1a Professor
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.
Sara9 Novice
19. maj 2018 - 22:12 #31
IntNumRows=18288
DatDato=00:00:00
kim1a Professor
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.
Sara9 Novice
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
kim1a Professor
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.
Sara9 Novice
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
kim1a Professor
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?
Sara9 Novice
20. maj 2018 - 19:48 #37
Yes det hjalp tusind tak for hjælpen. :)
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

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





Premium
Computerfans' paradis kæmper for livet: Nye nørder har indtaget Tokyos elektriske kvarter
Reportage: Tag med til Akihabara, der har været kendt som Tokyos elektriske bydel. Kvarterets gamle omdømme er under pres. De gamle boder med komponenter til selvbyggerne er kommet kraftigt i undertal, mens de nye nørder er rykket ind.
CIO
Allersidste opdatering på vej: Om en uge er det slut med stor-version af Windows 10 - skynd dig at opdatere
Om en uge er det slut for altid med den første store udgave af Windows 10, som Microsoft efter 29 måneder ikke længere vil supportere.
Job & Karriere
Vil strejkende it-folk kunne lægge hele Statens It ned? "Det har vi ingen kommentarer til," lyder den kryptiske melding fra Statens It
50 it-medarbejdere hos Statens It truer med at nedlægge arbejdet i sympatistrejke. Vil det betyde, at Statens It går ned?
Statens It nægter at svare.
White paper
Hvilken slags CRM understøtter bedst din forretning?
Hvordan vælger jeg det rigtige CRM-system? Hvad skal jeg prioritere? Denne guide giver dig et solidt grundlag for at vælge det CRM-system, der understøtter netop din virksomhed og jeres processer bedst – og som støtter op om arbejdet med bl.a. salg, marketing og service gennem den samlede kunderejse. Du får også konkrete og brugbare tips til, hvordan du øger sandsynligheden for, at CRM bliver en naturlig og selvfølgelig del af dine medarbejderes dagligdag. Hvilket jo er grundlaget for, at det samlede CRM-projekt bliver til en succes.