Microsoft Excel

Herbers Excel/VBA-Archiv

Bestimmte Spalten in csv-Datei schreiben/exportier

Betrifft: Bestimmte Spalten in csv-Datei schreiben/exportier von: Ingo Siemon
Geschrieben am: 18.09.2014 10:48:42

Hallo

Ich habe eine Excel-Tabelle.
In dieser Tabelle nehme ich immer wieder Änderungen an den Einträgen vor.
Ich möchte gerne ein Makro erstellen, mit dem ich quasi "auf Knopfdruck" die Werte meiner Tabelle in eine csv-Datei schreiben kann.

Dabei soll aber folgendes bedacht werden:
* Trennzeichen soll sein Semikolon
* Nur die Werte bestimmter Spalten sollen in die csv-date geschrieben werden.
* Die entsprechenden Spalten (z.B. B,C,F,K,Y,Z) sollen direkt irgendwo in dem VBA-Script eingetragen werden.
Ich brauche also beim Start des Makros keine Abfragen oder sowas.

Mittels Google-Suche habe ich das folgende Script gefunden:

Sub Produktdatei()

Dim varSpalten
Dim intSpalte As Integer
Dim objQuellblatt As Worksheet
Dim objZielblatt As Worksheet
Dim strPfad As String

'Datenquelle festlegen
Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
'Neues Tabellenblatt zum Auslagern (in Kopie) der zu speichernden Spalten
Set objZielblatt = ThisWorkbook.Worksheets.Add

varSpalten = Array("B", "C", "D", "E", "F", "I", "O", "Y", "Z") 'zu speichernde Spalten in  _
Kopierreihenfolge
For intSpalte = 0 To UBound(varSpalten)
  'Zu speichernde Spalten in neues Tabellenblatt kopieren
  objQuellblatt.Cells(1, varSpalten(intSpalte)).EntireColumn.Copy _
    Destination:=objZielblatt.Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1)
Next 'intSpalte
'Erste Spalte bleibt beim Kopieren leer - löschen
objZielblatt.Columns(1).Delete

'Tabellenblatt mit den zu speichernden Spalten in neue Arbeitsmappe schieben
objZielblatt.Move

'Speicherort abfragen
strPfad = GetOrdner()
'Erzeugte Arbeitsmappe als CSV speichern
ActiveWorkbook.SaveAs strPfad & "\" & "Dateiname.csv", FileFormat:=xlCSV, Local:=True

End Sub

Function GetOrdner(Optional ByVal def = "") As String

Dim objShell As Object
Dim objFolder As Object

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Bitte einen Ordner wählen", 0, def)

If objFolder Is Nothing Then Exit Function
GetOrdner = objFolder.Self.Path

End Function


Wenn ich das nun richtig sehe, geht das Script den Weg über ein zusätzliches Tabellenblatt, in das die gewünschten Spalten kopier und dann erst in die csv-Datei geschrieben werden.
Des Weiteren fragt dieses Script ja noch nach dem Speicherort.
Beides brauche ich eigentlich nicht.
Gibt es nicht ein einfacheres Script, welche nicht dem "Umweg" über ein zusätzilches Tabellenblatt geht?

Über Eur Hilfe würde ich mich wirklich riesig freuen.

Gruß
Ingo

  

Betrifft: AW: Bestimmte Spalten in csv-Datei schreiben/exportier von: Rudi Maintaire
Geschrieben am: 18.09.2014 11:17:45

Hallo,

Sub Produktdatei()
  
  Dim varSpalten
  Dim intSpalte As Integer, lngZeile As Long
  Dim objQuellblatt As Worksheet
  Dim objZielblatt As Worksheet
  Dim strPfad As String
  Dim varTmp, strOut As String
  Open "c:\test\dateiname.csv" For Output As #1  'anpassen
  'Datenquelle festlegen
  Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
  
  varSpalten = Array(2, 3, 4, 5, 6, 9, 15, 25, 26)
  varTmp = objQuellblatt.UsedRange
  For lngZeile = 1 To UBound(varTmp)
    strOut = ""
    For intSpalte = 0 To UBound(varSpalten)
      strOut = strOut & ";" & varTmp(lngZeile, varSpalten(intSpalte))
    Next intSpalte
    strOut = Mid(strOut, 2)
    Print #1, strOut
  Next lngZeile
  Close #1
End Sub

Gruß
Rudi


  

Betrifft: AW: Bestimmte Spalten in csv-Datei schreiben/exportier von: Ingo Siemon
Geschrieben am: 18.09.2014 12:09:52

Hallo Rudi

Vielen lieben Dank für Deine Hilfe.
Dein Code funktioniert auf Anhieb prima.
Ich freue mich wirklich sehr darüber.

Ein kelines Hoppala habe ich allerdings noch.
In meiner Tabelle sind zur Zeit 601 Zeilen mit Werten gefüllt.
Diese werden auch alle in die csv-Datei geschrieben.
Aber es werden noch weitere ca 90 Zeilen ind die csv-Datei geschrieben.
Diese weiteren 90 Zeilen in der csv-Datei einhalten keine Werte, sondern nur die Trennzeichen (";").
Ich habe die Vermutung, dass es daran liegen könnte, dass ich in 2 Spalten Formeln stehen habe.

Wie kann ich das denn am besten lösen?
Ist folgende Idee sinnvoll?
* Dein Code schreibt nur dann die Werte der entsprechenden Spalten in die csv-Datei, wenn in Spalte B auch jeweils ein Wert steht.

Gruß
Ingo


  

Betrifft: AW: Bestimmte Spalten in csv-Datei schreiben/exportier von: Rudi Maintaire
Geschrieben am: 18.09.2014 12:44:17

Hallo,
kann man so machen.

Sub Produktdatei()
  
  Dim varSpalten
  Dim intSpalte As Integer, lngZeile As Long
  Dim objQuellblatt As Worksheet
  Dim objZielblatt As Worksheet
  Dim strPfad As String
  Dim varTmp, strOut As String
  Open "c:\test\dateiname.csv" For Output As #1  'anpassen
  'Datenquelle festlegen
  Set objQuellblatt = ThisWorkbook.Sheets("Angebot")
  
  varSpalten = Array(2, 3, 4, 5, 6, 9, 15, 25, 26)
  varTmp = objQuellblatt.UsedRange
  For lngZeile = 1 To UBound(varTmp)
    strOut = ""
    If Len(varTmp(lngZeile, varSpalten(0))) > 0 Then
      For intSpalte = 0 To UBound(varSpalten)
        strOut = strOut & ";" & varTmp(lngZeile, varSpalten(intSpalte))
      Next intSpalte
      strOut = Mid(strOut, 2)
      Print #1, strOut
    End If
  Next lngZeile
  Close #1
End Sub

Gruß
Rudi


  

Betrifft: AW: Bestimmte Spalten in csv-Datei schreiben/exportier von: Ingo Siemon
Geschrieben am: 18.09.2014 12:54:53

Hallo Rudi

Großartig?
Ich bin happy voll und ganz.
Danke!

Gruß
Ingo


 

Beiträge aus den Excel-Beispielen zum Thema "Bestimmte Spalten in csv-Datei schreiben/exportier"