Avatar billede hjald8 Nybegynder
17. oktober 2004 - 13:28 Der er 8 kommentarer og
1 løsning

Eksportér Excel-Ark som csv-fil med semikolon, som seperator

Jeg har lavet følgende kode til at gemme et ark som csv.fil:

Filnavn2 = "" & Range("Sti").Value & "Navn-afd" & Range("EjendomsNr").Value & ".csv"
Sheets("Budgetposter").Select
ActiveWorkbook.SaveAs Filename:=Filnavn2, FileFormat:=xlCSV, CreateBackup:=False

Men mit økonomisystem kan kun lide semikolon, som seperator. Jeg har set at BAK tidligere har givet et svar med omdannelse fra komma til semikolon. Denne løsning er lavet med dialogboks omkring områdedefinition og gemme-funktionen.

Men den laver også følgende rækker i filen:
"01-01-2005","9011","1011","10110",

Hvor jeg har behov for følgende:
01-01-2005;9011;1011;10110;

Håber, at der er en der kan hjælpe!
På forhånd tak.
Avatar billede sjap Praktikant
17. oktober 2004 - 14:26 #1
Nu ved jeg jo ikke, hvad det er du har fået fra bak, men måske kan du bruge nedenstående link.

http://support.microsoft.com/?kbid=213448

Her skrives godt nok komma, men det kan jo rimeligt let rettes til semikolon i koden. Funktionen sætter vist også anførselstegn omkring, men de kan også rimleigt let fjernes fra koden. Det lyder som lidt af det du skriver. Kan du ikke kopiere den kode du har brugt herind, så kan jeg måske rette i den, så du får det du ønsker.
Avatar billede sjap Praktikant
17. oktober 2004 - 14:41 #2
Hvis jeg har fundet den rigtige funktion, så er der lige to ting du skal gøre. Først skal separatortegnet ændres til semikolon. Det gøres ved at ændre linien

Const Delim    As String = ","  'afgrænser (delimiter)

til

Const Delim    As String = ";"  'afgrænser (delimiter)


Det næste er at fjerne alle anførselstegn. Dette gøres ved at ændre

strTemp = strTemp & &chr(34) & rngOmr(x, y).Text & chr(34)

til

strTemp = strTemp & rngOmr(x, y).Text
Avatar billede hjald8 Nybegynder
17. oktober 2004 - 15:04 #3
Tak. Jeg kikker på det. Håber at jeg kan få det til at fungere.

Jeg havde håbet, at den simple funktion:
'ActiveWorkbook.SaveAs Filename:=Filnavn2, FileFormat:=xlCSV, CreateBackup:=False' blot skulle have et anden betegnelse for: FileFormat (således at den skiftede fra , til ;)

Jeg har ikke behov for inputbokse, særskilt område definering, idet det altid er hele arket der skal gemmes. (Der anvendes dog kun 16 kolonner og 600 rækker)
Avatar billede sjap Praktikant
17. oktober 2004 - 16:08 #4
Arbejder du på en PC med engelsk opsætning? På min bliver CSV filer automatisk gemt som semikolon-separerede.

Du kan ændre indstillingen via Kontrolpanel - Internationale og sproglige indstillinger. Så kan du f.eks. vælge danske indstillinger - Eller gå ind i tilpas og vælg semikolon som listeseparator.
Avatar billede hjald8 Nybegynder
17. oktober 2004 - 16:16 #5
Hej. Jeg kan desværre ikke ændre på opsætningen. Den er dansk i overfladen. Opsætningen er centralt defineret.

Jeg har forsøgt mig med efterfølgende kode. Jeg har fået den til at virke. Fjernet dialogboks med Sti og navn. Kunne godt tænke mig, at fjerne boks med områdedefinering (Altså at makroen selv fandt ud af hvor mange rækker den skal igennem - den skal kun igennem 16 kolonner):

Sub Eksport()
Const Delim    As String = ";"
Dim y          As Long
Dim x          As Long
Dim strTemp    As String
Dim lRows      As Long
Dim lCols      As Long
Dim lFno      As Long
Dim CSVFilename As String
Dim rngOmr As Range

Set rngOmr = Application.InputBox("Marker området der skal eksporteres :", "Marker Område", , , , , , 8)
CSVFilename = "" & Range("Sti").Value & "Navn-afd" & Range("EjendomsNr").Value & ".csv"

lFno = FreeFile
lRows = rngOmr.Rows.Count
lCols = rngOmr.Columns.Count
Open CSVFilename For Output As #lFno

For x = 1 To lRows
    strTemp = ""
    For y = 1 To lCols
        strTemp = strTemp & rngOmr(x, y).Text
        If y < lCols Then
            strTemp = strTemp & Delim
        Else
            Print #lFno, strTemp
        End If
    Next

Next
Close #lFno

End Sub
Avatar billede hjald8 Nybegynder
17. oktober 2004 - 16:18 #6
Efter diverse test skal kan filerne variere mellem 70 og 160 rækker.
Avatar billede sjap Praktikant
17. oktober 2004 - 16:57 #7
Prøv at se lidt på denne her (husk at rette filnavn!)


Sub Eksport()

Const Delim    As String = ";"
Dim y          As Long
Dim x          As Long
Dim strTemp    As String
Dim lRows      As Long
Dim lCols      As Long
Dim lFno      As Long
Dim CSVFilename As String
Dim rngOmr As Range

CSVFilename = "CSV-Test.csv"

lFno = FreeFile
lRows = ActiveSheet.Cells.Find(What:="*", After:=ActiveSheet.Range("A1"), _
        Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious, MatchCase:=False).Row
lCols = ActiveSheet.Cells.Find(What:="*", After:=ActiveSheet.Range("A1"), _
        Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious, MatchCase:=False).Column
Set rngOmr = Range(Cells(1, 1), Cells(lRows, lCols))
Open CSVFilename For Output As #lFno
For x = 1 To lRows
    strTemp = ""
    For y = 1 To lCols
        strTemp = strTemp & rngOmr(x, y).Text
        If y < lCols Then
            strTemp = strTemp & Delim
        Else
            Print #lFno, strTemp
        End If
    Next

Next
Close #lFno

End Sub
Avatar billede hjald8 Nybegynder
17. oktober 2004 - 17:12 #8
Det virker bare. Virkelig godt.
Tusind tak. ;-)
Avatar billede sjap Praktikant
17. oktober 2004 - 17:14 #9
Det var godt. Det var en ret sej fødsel at finde funktionen, der finder den sidste celle med tekst i for alle rækker og kolonner. Men jeg tror trods alt det lykkedes.
:0)
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
Kategori
Stort udvalg af Excel kurser til alle niveauer og jobfunktioner

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