![]() |
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
![]() ![]() |
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
![]() ![]() |
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
![]() ![]() |
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
![]() |