Microsoft Excel

Herbers Excel/VBA-Archiv

Datenexport CSV nur bis bestimmte Spalte

Betrifft: Datenexport CSV nur bis bestimmte Spalte von: Maris
Geschrieben am: 13.08.2020 12:19:10

Hallo,

ich habe ein Makro so anpassen können das ich einen Datenexport von einem Tabellenblatt machen kann. Allerdings möchte ich nicht das gesamte Tabellenblatt exportieren sondern nur bis Spalte F und dem letzten Datensatz von unten:

So sieht das Makro aus:

Public Sub CSV_Artikel_Click() 'Optionbutton
    'On Error GoTo Fehler
    'MsgBox Application.International(xlListSeparator)
    Call Var_Bel
    
    Call Pfad_prüfen
    
    If CSVError Then Exit Sub ' Pfad fehlt
    
    With TB2
        LR = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile der Spalte
        If LR > 1 Then
            '*** Namen zusammenbauen
            CSVName = "Import_Bestellung_" & Format(Now, "YYYYMMDD_hh_mm_ss") & Ext
            
            
            '*** Blatt als eigene xlsx erstellen
            .Copy
            Set WB2 = ActiveWorkbook
            
            
            '*** als csv abspeichern und beenden
            Application.DisplayAlerts = False
            WB2.SaveAs Filename:= _
                Pfad & CSVName, FileFormat:=xlCSVUTF8, CreateBackup:=False, Local:=True
            
            Application.Wait (Now + TimeValue("0:00:03")) 'Warten
            WB2.Close , False
                   
        Else
            MsgBox "Keine Daten für CSV vorhanden"
            
        End If
        
    End With
    
    '*** Fehlerbehandlung
    Err.Clear
Fehler:
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear
End Sub

TB2 ist mein Tabellenblatt.

Könntet mir jemand helfen?

Gruß
Maris

Betrifft: AW: Datenexport CSV nur bis bestimmte Spalte
von: Maris
Geschrieben am: 13.08.2020 14:54:45

Also ich vermute das ich in dieser Codezeile das irgendwie anpassen muss:

LR = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile der Spalte
Allerdings bekomme ich das mit Range etc. nicht hin. Hat jemand einen Tipp?

Betrifft: AW: Datenexport CSV nur bis bestimmte Spalte
von: peterk
Geschrieben am: 13.08.2020 15:08:02

Hallo

Füge folgende Zeiel in Dein Makro ein:
.
.
.
        LR = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile der Spalte 1
        LZ = .Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 1
.
.
.
            '*** Blatt als eigene xlsx erstellen
            .Copy
            Set WB2 = ActiveWorkbook
            
            'Alle Spalten ab "G" werden gelöscht
            If LZ > 6 Then  ' es gibt noch Spalten hinter "F"
                Range(Cells(1, "G"), Cells(LR, LZ)).ClearContents
            End If
            
            
            '*** als csv abspeichern und beenden
.
.
.



Betrifft: AW: Datenexport CSV nur bis bestimmte Spalte
von: Maris
Geschrieben am: 13.08.2020 15:34:58

Hallo Peter,

das funktioniert schon mal. Vielen lieben Dank! Gibt nur noch ein Problemchen. Vorneweg: Ich habe das Makro so aufgebaut:
Public Sub CSV_Artikel_Click() 'Optionbutton
    'On Error GoTo Fehler
    'MsgBox Application.International(xlListSeparator)
    Call Var_Bel
    
    Call Pfad_prüfen
    
    If CSVError Then Exit Sub ' Pfad fehlt
    
    With TB2
        
         LR = .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile der Spalte 1
         LZ = .Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 1

            '*** Blatt als eigene xlsx erstellen
            .Copy
            Set WB2 = ActiveWorkbook
            
            'Alle Spalten ab "G" werden gelöscht
            If LZ > 6 Then  ' es gibt noch Spalten hinter "F"
                Range(Cells(1, "G"), Cells(LR, LZ)).ClearContents
                
            End If
                
            If LR > 1 Then
            '*** Namen zusammenbauen
            CSVName = "Import_Bestellung_" & Format(Now, "YYYYMMDD_hh_mm_ss") & Ext
            
            '*** als csv abspeichern und beenden
            Application.DisplayAlerts = False
            WB2.SaveAs Filename:= _
                Pfad & CSVName, FileFormat:=xlCSVUTF8, CreateBackup:=False, Local:=True
            
            Application.Wait (Now + TimeValue("0:00:03")) 'Warten
            WB2.Close , False
                   
        Else
            MsgBox "Keine Daten für CSV vorhanden"
            
        End If
        
    End With
    
    '*** Fehlerbehandlung
    Err.Clear
Fehler:
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Als Ergebnis kommt folgendes Besipielhaft raus:

Nummer;Name;Menge;Preis;Nummer2;Nummer3;;;;;;
123456;Das ist Name 1;10;550;121211;1211555;;;;;;
123456;Das ist Name 2;20;650;221211;2211555;;;;;;

Eigentlich sollte kein Trennzeichen mehr nach Nummer3 kommen. Hier sind weitere 6 Trennzeichen ";"

Das ist genau der Bereich der Zeile 1 "G:L" in diesem standen Daten und die wollte ich ja in der Copy ausschließen bzw. nicht im CSV haben. JEtzt sind zwar keine Daten mehr drin aber die Spalten werden als leer übermittelt. Muss man die Spalte vielleicht löschen und nicht mit ClearContents nur die Inhalte?

Betrifft: AW: Datenexport CSV nur bis bestimmte Spalte
von: peterk
Geschrieben am: 13.08.2020 16:24:56

Hallo

Range(Cells(1, "G"), Cells(LR, LZ)).EntireColumn.Delete

Peter