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-Key: 341991

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

Printed on: April 26, 2024 at 17:04 o'clock

Member: Meierjo
Meierjo Jun 29, 2017 at 09:47:37 (UTC)
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
Member: abuelito
abuelito Jun 29, 2017 at 10:07:24 (UTC)
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
Member: rentner63
rentner63 Jun 29, 2017 at 11:24:24 (UTC)
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
Mitglied: 133417
133417 Jun 29, 2017 updated at 12:04:05 (UTC)
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ß
Member: abuelito
abuelito Jun 29, 2017 at 12:48:31 (UTC)
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
Member: abuelito
abuelito Jun 29, 2017 at 12:50:00 (UTC)
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
Mitglied: 133417
Solution 133417 Jun 29, 2017 updated at 13:22:08 (UTC)
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.
Member: rentner63
Solution rentner63 Jun 29, 2017 updated at 13:48:42 (UTC)
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
Member: abuelito
abuelito Jun 29, 2017 at 13:54:23 (UTC)
Goto Top
Suuuuuper, vielen lieben Dank .. passt perfekt
Member: abuelito
abuelito Jun 29, 2017 at 13:55:34 (UTC)
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