20. maj 2005 - 14:07Der 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 ?
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
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.
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
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.
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.