Avatar billede madiedk Nybegynder
19. december 2007 - 17:28 Der er 8 kommentarer og
1 løsning

gem ark som csv-fil automatisk

Hej

jeg har et excelark med en masse faner, den ene fane vil jeg gerne kunne gemme som en semikolonsepererat csv-fil ved bare at klikke på en knap, nogle der kan hjælpe?
Avatar billede panebb Novice
19. december 2007 - 18:14 #1
er det knappen eller funktionen du mangler
Avatar billede madiedk Nybegynder
19. december 2007 - 18:54 #2
det er funktionen, altså vba koden, jeg vil have det lavet, så man bare klikker på en knap og så bliver der oprettet en csv fil med med den data der er i kolonnerne i arket, og de forskellige kolonner skal være semikolonseperaret
Avatar billede epimetheus Nybegynder
19. december 2007 - 21:23 #3
Måske noget i stil med det her.

Sub OpretFil()
  Dim c As Object
  Dim lPath As String
  Dim lStr As String
  Dim lFNo As Integer
  Dim lRow As Long
  lPath = "C:\Temp\MinFil.csv"
  lFNo = FreeFile
  Open lPath For Output As #lFNo
  For Each c In Selection
    If lRow < c.Row And lStr <> "" Then
      Print #lFNo, lStr
      lStr = ""
    End If
    If lStr = "" Then
      lStr = c
    Else
      lStr = lStr & ";" & c
    End If
    lRow = c.Row
  Next c
  Close #lFNo
End Sub
Avatar billede madiedk Nybegynder
19. december 2007 - 21:34 #4
hmm...ser interessant ud, have ikke tænkt på sådan en løsning, men vil klart prøve den. skal den bare køres ind i arket?
Avatar billede madiedk Nybegynder
19. december 2007 - 21:38 #5
den virker sku, sejt, fed og simpel løsning, svar så der point
Avatar billede epimetheus Nybegynder
19. december 2007 - 21:44 #6
Læg koden i et modul.
Tilpas filnavn.
Tilpas ark og område hvor data skal komme fra.
Kald den som en almindelig makro.

Jeg har lige tilpasset koden lidt.
Sidste række kom ikke med i filen.

Sub OpretFil()
  Dim c As Object
  Dim lPath As String
  Dim lStr As String
  Dim lFNo As Integer
  Dim lRow As Long
  lPath = "C:\Temp\MinFil.csv" ' Navnet på filen der skal oprettes
  lFNo = FreeFile
  Open lPath For Output As #lFNo
  For Each c In Sheets("Sheet1").Range("A1:B10") ' Det ark og område der skal puttes i filen
    If lRow < c.Row And lStr <> "" Then
      Print #lFNo, lStr
      lStr = ""
    End If
    If lStr = "" Then
      lStr = c
    Else
      lStr = lStr & ";" & c
    End If
    lRow = c.Row
  Next c
  Print #lFNo, lStr ' For at få sidste række med i filen
  Close #lFNo
End Sub

Jeg sad selv og kiggede på saveas, der ville kræve at man kopierer data over i en ny workbook, som man så gemmer som en semikolon sepereret fil. Lidt besværligt.

Ideén til det her kom fra følgende spørgsmål.
http://www.eksperten.dk/spm/492565
Avatar billede epimetheus Nybegynder
19. december 2007 - 21:46 #7
Husk lige og få tredie sidste linie med.

  Next c
  Print #lFNo, lStr ' For at få sidste række med i filen
  Close #lFNo
End Sub

Ellers får du ikke det hele med over i filen.

Jeg samler ikke på point, så dem beholder du bare.
Avatar billede epimetheus Nybegynder
19. december 2007 - 21:59 #8
Du kan jo også lige kigge forbi

http://www.eksperten.dk/spm/619269
Avatar billede madiedk Nybegynder
20. december 2007 - 20:50 #9
okay, tak
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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