abuelito
Goto Top

Excel VBA UserForm1 - Daten in neue Datei kopieren

Hallo an Alle,

ich habe wieder mal ein Problem mit meiner UserForm1.

Ich habe eine UserForm1 und möchte über ein Image1-Button Zeilen aus der Tabelle1 in eine neue Datei kopieren.

1. Aus „Tabelle1“ soll als erstes die Zeile 4 mit den Überschriften kopiert werden (Spalten „A-BH“) und in eine neue Datei in Zeile 1 eingefügt werden
2. Anschließend sollen aus der bestehenden Datei alle Zeilen ab der Zeile 5, wo in Spalte Y ein Wert steht, kopiert und in die neue Datei ab Zeile 2 eingefügt werden.
3. Die neue Datei soll dann geschlossen werden und beim Schließen in das Verzeichnis C:\Test\ mit dem Dateinamen „Test_(aktuelles Datum mit Format YYYY_MM_DD)“.xlsx gespeichert werden.

Das Ganze müsste im Hintergrund laufen.

Ich bekomme es leider nicht hin face-sad und hoffe auf euer Hilfe.

Vielen Dank schon mal

Grüße

Content-ID: 341991

Url: https://administrator.de/contentid/341991

Ausgedruckt am: 15.11.2024 um 23:11 Uhr

Meierjo
Meierjo 29.06.2017 um 11:47:37 Uhr
Goto Top
Hallo

Ich nehme an, du arbeitest immer noch an der selben Tabelle?
So wie du das da oben beschreibst, kopierst du ja das ganze Tabellenblatt (als Backup) in eine neue Datei?

Was bekommst du denn nicht hin??

Gruss
abuelito
abuelito 29.06.2017 um 12:07:24 Uhr
Goto Top
Hi Meierjo,

ja genau, das ist die.

Ich bekomme das alles nicht so hin. Die neue Datei muss jeden Tag neu erstellt werden, um Auswertungen erstellen zu können. Aber es wird nicht das ganze Tabellenblatt kopiert, sondern nur die ganzen Zeilen, wo in der Spalte Y ein Wert besteht. Hat eine Zeile in Spalte Y kein Wert, dann darf diese Zeile nicht kopiert werden.

Grüße und vielen Dank
rentner63
rentner63 29.06.2017 um 13:24:24 Uhr
Goto Top
Hallo abuelito!

Mit der AutoFilter-Funktion geht dies recht einfach:
Sub test()
    Dim strPath As String
    
    strPath = "C:\Test\Test_" & Format(Date, "yyyy_mm_dd") & ".xlsx"  
    
    Application.ScreenUpdating = False
    
    Workbooks.Add
    
    With ThisWorkbook.ActiveSheet
        .AutoFilterMode = False
        .Range(.Range("Y4"), .Cells(.Rows.Count, "Y").End(xlUp)).AutoFilter Field:=1, Criteria1:="<>"  
        .Range("A4").CurrentRegion.Copy ActiveWorkbook.Sheets(1).Range("A1")  
        .AutoFilterMode = False
    End With
    
    With ActiveWorkbook
        .SaveAs strPath
        .Close False
    End With
    
    Application.ScreenUpdating = True
End Sub
Gruß Dieter
133417
133417 29.06.2017 aktualisiert um 14:04:05 Uhr
Goto Top
Sub CopyData()
    Dim myPath As String, wbNew as Workbook
    myPath = "C:\Test\test_" & Format(Date, "yyyy_MM_dd") & ".xlsx"  
    Application.Screenupdating = False
    Set wbNew = Workbooks.Add
    With Sheets(1)
        With .Range("A4:BH" & .Cells(.Rows.Count, "Y").End(xlUp).Row)  
            .AutoFilter Field:=25, Criteria1:="<>"  
            .SpecialCells(xlCellTypeVisible).Copy wbNew.Sheets(1).Range("A1")  
        End With
        .AutoFilterMode = False
    End With
    With wbNew
        .SaveAs myPath
        .Close
    End With
    Application.Screenupdating = True
End Sub
Gruß
abuelito
abuelito 29.06.2017 um 14:48:31 Uhr
Goto Top
Hallo Dieter,

vielen lieben Dank.

Leider wird auch die Zeile 3 mitkopiert, aber ich benötige im 1. Schritt nur die Kopie der Zeile 4 (=Überschriften).

Ansonsten funktioniert es einwandfrei.

Viele Grüße
abuelito
abuelito 29.06.2017 um 14:50:00 Uhr
Goto Top
Hallo BiebersBaum,

vielen Dank für Deine Hilfe.

Bei Deinem Code meckert VBA die folgende Zeile an:

.AutoFilter Field:=25, Criteria1:="<>"

Grüße
133417
Lösung 133417 29.06.2017 aktualisiert um 15:22:08 Uhr
Goto Top
Zitat von @abuelito:
Bei Deinem Code meckert VBA die folgende Zeile an:

.AutoFilter Field:=25, Criteria1:="<>"
Kann ich nicht bestätigen, wurde hier getestet und läuft einwandfrei, muss an deinem Sheet liegen, dessen Aussehen hier leider keiner sehen kann.
rentner63
Lösung rentner63 29.06.2017 aktualisiert um 15:48:42 Uhr
Goto Top
Hallo abuelito!

Bin davon ausgegangen, dass die Zeile 3 leer ist. Sollte dann so gehen:
.Range("A3").CurrentRegion.Offset(1,0).Copy ActiveWorkbook.Sheets(1).Range("A1")   

Gruß Dieter
abuelito
abuelito 29.06.2017 um 15:54:23 Uhr
Goto Top
Suuuuuper, vielen lieben Dank .. passt perfekt
abuelito
abuelito 29.06.2017 um 15:55:34 Uhr
Goto Top
Auch Dir vielen lieben Dank, denn Deine Variante passt auch .. Oh mann, ohne euch alle hier bei administrator.de wäre ich echt aufgeschmissen

Grüße