Avatar billede jcoe Nybegynder
20. maj 2005 - 14:07 Der er 7 kommentarer og
2 løsninger

Gem som CSV via VBA macro

Jeg gør stor brug af at gemme filer i CSV-format.
Min maskine er i Windows opsat på dansk (komma som decimalseperator og punktum som tusindtalsseperator osv.)
Jeg har ikke oplevet problemer og datoer gemmes f.eks. som dd-mm-åååå og tal/beløb som #.###,##

Nu har jeg så lavet en macro i Excel som efter at have udført forskellige operationer slutter af med at vise "save as" dialogboksen.

Følgende linie står i min VBA kode:
Application.Dialogs(xlDialogSaveAs).Show

Herefter gemmer jeg filen i CSV-format. Når jeg så åbner CSV filen igen, så har den imidlertid gemt datoer som MM/DD/ÅÅÅÅ og beløb som #,###.##

På mig ligner det et engelsk format.
Hvordan hænger det sammen og hvad kan jeg skrive i koden for at få den til at gøre det på dansk ?
Avatar billede brynil Nybegynder
20. maj 2005 - 16:54 #1
Hvis jeg anvender makroeditoren til at gemme flg. Excel range:

1    12-05-2005    1.234,56
2    13-05-2005    2.345,67
3    14-05-2005    3.456,78
4    15-05-2005    4.567,89
5    16-05-2005    5.679,00

med Gem som.. 'CSV (semikolonsepareret)', får jeg flg csv fil:

1;12-05-2005;1.234,56
2;13-05-2005;2.345,67
3;14-05-2005;3.456,78
4;15-05-2005;4.567,89
5;16-05-2005;5.679,00

Koden der genereres er:

    Range("A1:C5").Select
    ActiveWorkbook.SaveAs Filename:= _
        "D:\Mappe1.csv", FileFormat:= _
        xlCSV, CreateBackup:=False

Er det ikke det du efterspørger?
Avatar billede brynil Nybegynder
20. maj 2005 - 16:55 #2
makroeditor >> makrooptager
Avatar billede bak Seniormester
20. maj 2005 - 17:25 #3
Excel 97 og 2000 vil altid lave csv-filer i engelsk format.
Prøv at bruge denne makro istedet
Den eksporterer i dansk format..
Vælg en celle i området og kør makroen.

Sub EksportAsCSV_DK()
Const Delim                As String = ";"            'afgrænser (delimiter)
Dim strFileName            As String
Dim rngOmr                As Range
Dim y                      As Long                    'tæller
Dim x                      As Long                    'tæller
Dim strTemp                As String                  'streng til de enkelte rækker
Dim lRows                  As Long                    'antal rækker
Dim lCols                  As Long                    'antal kolonner
Dim lFno                  As Long                    'fil nummer

  strFileName = Application.GetSaveAsFilename(fileFilter:="CSV-Fil (*.csv), *.csv")
  rngOmr = Selection.CurrentRegion
  lFno = FreeFile
  lRows = rngOmr.Rows.Count
  lCols = rngOmr.Columns.Count
  Open strFileName 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 jcoe Nybegynder
23. maj 2005 - 09:44 #4
Til Brynil

Tak for dit svar, men det er ikke helt det jeg søger.

Det du har lavet er en macro der løber hele save as processen igennem og altid saver som "D:\mappe1.csv".

Jeg har prøvet din macro og her gemmer den stadig i engelsk format.
Jeg bruger Excel 2000 i engelsk version.

Det jeg har brug for er at save as dialog boksen bliver vist og at jeg derefter manuelt gemmer som CSV-fil.
Grunden til dette er at filen skal fungere som en skabelon for mine kollegaer og her kan det være vilkårligt hvilket filnavn og på hvilken sti de ønsker at gemme.
Jeg undkylder at jeg ikke fik formuleret dette tydeligt i første omgang.


--------------------------------------------------------------------
Til Bak

Også tak for dit svar.
Så vidt jeg kan se har du fat i noget af det rigtige. Men...

Jeg har prøvet at køre din macro og der popper en save as dialogbox frem som jeg ønsker det. Når jeg så giver den et filnavn og trykker på save så går den imidlertid i fejl.

Run-time error 91
object varable or with block variable not set

Debuggeren standser i linien
rngOmr = Selection.CurrentRegion

Jeg kiggede så på dimensioneringen af rngOmr as range. Range stod ikek med blå tekst så jeg valgte at slette "as range", så den bare dimesioneres som variable.

Herefter fejler den så på linien:
lRows = rngOmr.Rows.Count

Jeg skal indrømme at jeg er rimelig nybegynder i VBA så jeg ved ikke helt nøjagtigt hvad din macro gør, og jeg ved heller ikke rigtigt hvordan jeg kommer videre.

Der må vel findes en mere simpel måde at gribe det an på. Et eller andet med at kalde nogle locale settings frem i forbindelse med denne operation.
Avatar billede bak Seniormester
24. maj 2005 - 20:30 #5
der er gledet et lille ord (set) ud under kopiering :-)
Husk at stå i det aktuelle område når du starter makroen

Sub EksportAsCSV_DK()
Const Delim                As String = ";"            'afgrænser (delimiter)
Dim strFileName            As String
Dim rngOmr                As Range
Dim y                      As Long                    'tæller
Dim x                      As Long                    'tæller
Dim strTemp                As String                  'streng til de enkelte rækker
Dim lRows                  As Long                    'antal rækker
Dim lCols                  As Long                    'antal kolonner
Dim lFno                  As Long                    'fil nummer

  strFileName = Application.GetSaveAsFilename(fileFilter:="CSV-Fil (*.csv), *.csv")
  Set rngOmr = Selection.CurrentRegion
  lFno = FreeFile
  lRows = rngOmr.Rows.Count
  lCols = rngOmr.Columns.Count
  Open strFileName 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 jcoe Nybegynder
25. maj 2005 - 08:26 #6
Til Bak

Nu virker det, tak for hjælpen
Avatar billede jcoe Nybegynder
25. maj 2005 - 08:48 #7
Øhh..

Det er første gang jeg bruger dette forum, så jeg er i tvivl om hvordan giver man point.
Jeg er bange for at jeg er kommet til at give dem til mig selv.
Det var Bak, der skulle have haft dem.

Please help
Avatar billede bak Seniormester
25. maj 2005 - 16:40 #8
Det er helt ok jcoe, jeg har nok.
Du kan kun give point hvis jeg lægger et svar. Det venter jeg normalt med indtil jeg er sikker på vi har en løsning.
Avatar billede jcoe Nybegynder
26. maj 2005 - 08:25 #9
OK, endnu engang 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