Excel, VBA - ändra punkt till komma

Permalänk
Medlem

Excel, VBA - ändra punkt till komma

Jag håller på att bli galen på detta. Hur ändrar jag punkt till comma i celler?
Om jag gör det med knappen 'replace' i excel fungerar det.
Om jag spelar in ett macro när jag använder kanppen funkar det.
Men om jag sen använder exakt samma kod som jag spelat in fungerar det inte.

koden ser ut så här i inspelad variant:

Range("A22:B30").Select Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False

Men om jag ändrar på range till andra celler så fungerar den inte.

Tanken är att jag ska ändra på alla celler från A2-B(LastRow), och då byta punkt till comma.

Några förslag?
Kör excel 2007

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Agonotheta
koden ser ut så här i inspelad variant:

Range("A22:B30").Select Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False

Men om jag ändrar på range till andra celler så fungerar den inte.

Nu har jag förvisso bara testat i excel 2010, men där verkar det fungera. Vad händer annars?

Permalänk
Medlem

www.hellis.me/testfil.zip

Ja det glömde jag säga
Den plockar bort punkten helt och lämnar ett mellanrum

Permalänk
Medlem

Tänkte på en sak.
Jag behöver egentligen inte ha siffrorna i kolumn A och B, så om det finns någon annan lösning så går det lika bra.
Typ att man lägger till två nya kolumner och där gör någon förvandling.

Som ni kanske ser så är det GPSdata, och tanken är att jag ska göra ett macro som fixar till siffrorna så jag kan göra en overlay på en video.
Och då måste jag ha GPSdatan i commaformat för att kunna räkna ut sträckan mellan två GPSpunkter.

Så kort och gott, lösningen behöver inte vara snygg eller smidig bara den gör jobbet

Permalänk

Hmm, kanske funkar konceptet

Dim A As Double A = Replace(Cells(1, 1).Text, ".", ",")

Är det bara A och B du ska omvandla, eller i all data?

Visa signatur

I thought the only thing the internet was good for was porn.
-Bender, Futurama

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av greendevil
Hmm, kanske funkar konceptet

Dim A As Double A = Replace(Cells(1, 1).Text, ".", ",")

Är det bara A och B du ska omvandla, eller i all data?

Tack det funkar!
Blir ingen snygg lösning men det lär gå så pass fort att det inte spelar någon roll.
Tack!

Permalänk
Medlem

Hmm.. Insåg nyss att den metoden avrundar mina GPSkoordinater av nån anledning.
Förstår verkligen inte varför.

Så här ser det ut just nu.

Sub test() Dim A As Double Columns(1).Insert Rows(2).Insert Rows(2).Insert LastRow = Range("B" & Rows.Count).End(xlUp).Row Range("B4", "E" & LastRow).NumberFormat = "@" For Each Dcell In Range("B4", "E" & LastRow) A = Replace(Dcell.Value, ".", ",") Dcell.Value = A Next Columns(4).Insert Range("D:D").NumberFormat = "0" Range("D5").Value = "=ACOS(COS(RADIANS(90-B4)) *COS(RADIANS(90-B5)) +SIN(RADIANS(90-B4)) *SIN(RADIANS(90-B5)) *COS(RADIANS(C4-C5))) *6371000" Range("D6").Value = "=D5+ACOS(COS(RADIANS(90-B5)) *COS(RADIANS(90-B6)) +SIN(RADIANS(90-B5)) *SIN(RADIANS(90-B6)) *COS(RADIANS(C5-C6))) *6371000" Range("D6", "D" & LastRow).FillDown Columns(6).Insert Range("E:G").NumberFormat = "0" Range("F5").Value = "=((E4-E5)/1000)*60*60" Range("F5", "F" & LastRow).FillDown Columns(8).Insert Range("H:H").NumberFormat = "0.000" Range("H5").Value = "=G5/F5" Range("H5", "H" & LastRow).FillDown Range("I:I").TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, Other:=True, OtherChar:="Z" Range("I:I").TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, Other:=True, OtherChar:="T" Range("A1", "K1").ClearContents Range("B1").Value = "Latitude" Range("C1").Value = "Longitude" Range("D1").Value = "H-Distance" Range("E1").Value = "Altitude" Range("F1").Value = "V-Speed" Range("G1").Value = "H-Speed" Range("H1").Value = "Glide" Range("I1").Value = "Date" Range("J1").Value = "Time" Range("A2").Value = "Max" Range("A3").Value = "Min" Range("F2").Value = "=MAX(F5:F" & LastRow & ")" Range("F3").Value = "=MIN(F5:F" & LastRow & ")" Range("G2").Value = "=MAX(G5:G" & LastRow & ")" Range("G3").Value = "=MIN(G5:G" & LastRow & ")" Range("H2").Value = "=MAX(H5:H" & LastRow & ")" Range("H3").Value = "=MIN(H5:H" & LastRow & ")" Cells.Columns.AutoFit End Sub

Om du stegar koden så ser du hur den avrundar mina siffor, och det är väldigt skumt eftersom A behåller samtliga siffror.

Permalänk
Medlem

Eller vänta nu, det är nog bara jag som inbillade mig.
Den verkar inte alls avrunda.

Permalänk
Medlem

Nu har jag verkligen kört fast.

Tanken är att jag skulle skapa en Private sub workbook_open() som körs var gång excel startar.
Och när jag då startar excel ska den kolla om det är en csv-fil och då fråga om jag vill köra makrot.

Koden fungerar men ändå inte.
När jag öppnar en csv-fil körs makrot men det stannar vid extension=mid(.....
Och anledningen till att det stannar är för att wkbName är tomt.
Om jag nu stoppar koden och sen kör den igen så går allt genom.
Så det verkar som att när jag öppnar csv-filen så "hinner" inte excel förstå att den öppnat en fil innan makrot körs (?).

Första for-loopen är till för att kolla vilken fil som är öppen, om jag bara använder thisworkbook.name så visar den xlam-filen (add-in filen).
Andra for-loopen är till för att få fram vilken filtyp det är på filen, här borde den veta att det är en csv-fil som är öppen och då "sortera bort" namnet från filändelsen.

koden:
(strecket visar var koden stannar när den körs första gången.)

Private Sub Workbook_Open() Dim A As Double Dim wkbName As String Dim wkb As Workbook 'ThisWorkbook.Activate For Each wkb In Workbooks wkbName = wkb.Name Next For i = Len(wkbName) To 2 Step -1 c = Mid(wkbName, i, 1) If c = "." Then pos = i + 1 Exit For End If Next extension = Mid(wkbName, pos, (Len(wkbName) + 1 - pos)) ____________________________________________________________ If extension = "csv" And Range("A1").Value = "LATITUDE" And Range("B1").Value = "LONGITUDE" And Range("C1").Value = "ALTITUDE" And Range("D1").Value = "SPEED" Then Response = MsgBox(prompt:="Run GPS-Script?", Buttons:=vbYesNo) If Response = vbNo Then Exit Sub End If Else Exit Sub End If Columns(1).Insert Rows(2).Insert Rows(2).Insert LastRow = Range("B" & Rows.Count).End(xlUp).Row Range("B4", "E" & LastRow).NumberFormat = "@" For Each Dcell In Range("B4", "E" & LastRow) A = Replace(Dcell.Value, ".", ",") Dcell.Value = A Next Columns(4).Insert Range("D:D").NumberFormat = "0" Range("D5").Value = "=ACOS(COS(RADIANS(90-B4)) *COS(RADIANS(90-B5)) +SIN(RADIANS(90-B4)) *SIN(RADIANS(90-B5)) *COS(RADIANS(C4-C5))) *6371000" Range("D6").Value = "=D5+ACOS(COS(RADIANS(90-B5)) *COS(RADIANS(90-B6)) +SIN(RADIANS(90-B5)) *SIN(RADIANS(90-B6)) *COS(RADIANS(C5-C6))) *6371000" Range("D6", "D" & LastRow).FillDown Columns(6).Insert Range("E:G").NumberFormat = "0" Range("F5").Value = "=((E4-E5)/1000)*60*60" Range("F5", "F" & LastRow).FillDown Columns(8).Insert Range("H:H").NumberFormat = "0.000" Range("H5").Value = "=G5/F5" Range("H5", "H" & LastRow).FillDown Range("I:I").TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, Other:=True, OtherChar:="Z" Range("I:I").TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, Other:=True, OtherChar:="T" Range("A1", "K1").ClearContents Range("B1").Value = "Latitude" Range("C1").Value = "Longitude" Range("D1").Value = "H-Distance" Range("E1").Value = "Altitude" Range("F1").Value = "V-Speed" Range("G1").Value = "H-Speed" Range("H1").Value = "Glide" Range("I1").Value = "Date" Range("J1").Value = "Time" Range("A2").Value = "Max" Range("A3").Value = "Min" Range("F2").Value = "=MAX(F5:F" & LastRow & ")" Range("F3").Value = "=MIN(F5:F" & LastRow & ")" Range("G2").Value = "=MAX(G5:G" & LastRow & ")" Range("G3").Value = "=MIN(G5:G" & LastRow & ")" Range("H2").Value = "=MAX(H5:H" & LastRow & ")" Range("H3").Value = "=MIN(H5:H" & LastRow & ")" Cells.Columns.AutoFit End Sub