Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Datentransfer in anderes Workbook

Forumthread: VBA Datentransfer in anderes Workbook

VBA Datentransfer in anderes Workbook
10.06.2020 15:42:48
GismoTB
Hallo zusammen,
ich habe ein kleines Problem und brauche eure Hilfe.
Aus einer Pivottabelle mit 7 Spalten (A-G) möchte ich, dass in Spalte B nach einen Wert gesucht wird.
Wenn dieser Wert (x >0,25) erfüllt wird, möchte ich, dass die Spalte A und B in ein anderes Workbook (Tabelle1 und Spalte E und F) kopiert werden.
Bedingung im InputFile ist, dass die neuen Zeilen unten angefügt werden.
Ich denke, es ist eine Schleife. Meinen Code füge ich mal an:
Sub Transfer()
Dim rngZelle As Range
'Dim Score As String
Dim wbStart As Workbook
Dim wbZiel As Workbook
Set wbStart = ActiveWorkbook
Set wbZiel = Workbooks.Open("C:\Users\benutzername\Desktop\Dateninput.xlsx")
For Each rngZelle In wbStart("Tabelle1").Range("B:B")
If rngZelle.Value > 0.25 Then
rngZelle.Cells(, -1).Copy Destination:=wbZiel.Sheets("Tabelle1").Range("E2")
End If
Next rngZelle
End Sub

Mein Problem ist, dass die erste Zeile der Schleifen bereits einen Fehler hat. Ich hoffe ihr könnt mir helfen!
Vielen Dank schon mal.
Liebe Grüße
Thomas
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 16:08:50
ralf_b

In wbStart.Worksheets("Tabelle1").Range("B:B")
Tabelle1 ist ein text. du kannst den nur in einer auflistung( hier Worksheets) nutzen, um dir ein Worksheet( oder Tabelle) zu referenzieren.
wenn du im activen Workbook bist, brauchst du das gar nicht extra benennen. ein anderes Workbook brauchst du erst wenn du die neue Datei erzeugst bzw öffnest.
for each zelle in Range("B:B") würde reichen wenn du in der aktiven Tabelle arbeitest
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 16:27:43
GismoTB
Hallo Ralf,
vielen Dank für deine schnelle Antwort.
ich habe die Zeile direkt abgeändert:
For Each rngZelle In Range("B:B")
jetzt kommt direkt der nächste Bug in der zeile:
rngZelle.Cells(, -1).Copy Destination:=wbZiel.Sheets("Tabelle1").Range("E2")
Ich muss gestehen, dass ich das fast erwartet habe.
Ich möchte ja die der Werte in Spalte B und der Werte in Spalte A kopiert werden, daher habe ich .Cells(,-1).Copy geschrieben.
Wie muss die Zeile richtig heißen?
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 16:33:10
ralf_b
cells erwartet immer (glaube ich) zeile und spalte. also cells(1,1) oder so.
AW: VBA Datentransfer in anderes Workbook
10.06.2020 16:37:43
ralf_b
was du nehmen kannst ist range("A:B"), dann hast du zwei spalten oder worksheet("tabellex").Columns(spaltennummer) dann hast du auch ne Spalte in der Hand
AW: VBA Datentransfer in anderes Workbook
10.06.2020 16:49:45
GismoTB
Danke, dass du mir bei meinen Problem hilfst.
ich komme da leider auch nicht mit weiter

Sub Transfer()
Dim rngZelle As Range
Dim Score As String
Dim wbStart As Workbook
Dim wbZiel As Workbook
Set wbStart = ActiveWorkbook
Set wbZiel = Workbooks.Open("C:\Users\bernertt\Desktop\Dateninput.xlsx")
For Each rngZelle In Range("B:B")
If rngZelle.Value > 0.25 Then
rngZelle.Range("A:B").Copy Destination:=wbZiel.Worksheets(Tabelle1).Range("E2")
End If
Next rngZelle
End Sub

Ist steigt er aus (beim fettgedruckten).
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 16:50:15
ralf_b
mach eine for I=zeilenummer to letzteZeile schleife anstatt einer for each schleife
damit kannst du die zelle mit dem zähler i ansprechen und im Ziel auch. jetzt kopiert du alles immer in die selbe zelle.
dim cnt as long
cnt = 2
for i =1 to letztezeile
if rngZelle.Cells(i, "B") > 0.25 then
wbZiel.Sheets("Tabelle1").Cells(cnt ,"E") =rngZelle.Cells(i, "B")
wbZiel.Sheets("Tabelle1").Cells(cnt ,"D") =rngZelle.Cells(i, "A")
cnt = cnt +1
end if
next 

Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 17:08:26
GismoTB
Okay ich glaube, ich verstehe was du da tust.
Sub Transfer2()
Dim rngZelle As Range
Dim Score As String
Dim wbStart As Workbook
Dim wbZiel As Workbook
Dim cnt As Long
cnt = 2
Set wbStart = ActiveWorkbook
Set wbZiel = Workbooks.Open("C:\Users\bernertt\Desktop\Dateninput.xlsx")
For i = 1 To letztezeile
If rngZelle.Cells(i, "B") > 0.25 Then
wbZiel.Sheets("Tabelle1").Cells(cnt, "F") = rngZelle.Cells(i, "B")
wbZiel.Sheets("Tabelle1").Cells(cnt, "E") = rngZelle.Cells(i, "A")
cnt = cnt + 1
End If
Next
End Sub
Sau dumme Frage, muss ich die letzteZeile definieren und wenn ja wie?
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 17:16:53
GismoTB
Dumme Frage, habe gefunden:
Sub Transfer2()
Dim rngZelle As Range
Dim Score As String
Dim wbStart As Workbook
Dim wbZiel As Workbook
Dim cnt As Long
cnt = 2
letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set wbStart = ActiveWorkbook
Set wbZiel = Workbooks.Open("C:\Users\bernertt\Desktop\Dateninput.xlsx")
For i = 1 To letztezeile
If rngZelle.Cells(i, "B") > 0.25 Then
wbZiel.Sheets("Tabelle1").Cells(cnt, "F") = rngZelle.Cells(i, "B")
wbZiel.Sheets("Tabelle1").Cells(cnt, "E") = rngZelle.Cells(i, "A")
cnt = cnt + 1
End If
Next
End Sub
Aber hängt bei
If rngZelle.Cells(i, "B") > 0.25 Then
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 18:08:37
Werner
Hallo,
vielleicht erklärst du mal, was du eigentlich machen möchtest.
Wenn ich das richtig sehe dann willst du:
1. im Blatt wbStart die Spalte B in einer Schleife durchlaufen
2. für jede Zelle prüfen, ob in Spalte A der Wert größer als 0.25 ist
3. wenn ja, dann die entsprechende Zeile und da Spalte A und B ins Blatt wbZiel kopieren
so weit richtig?
Allerdings überschreibst du dir dadurch
Destination:=wbZiel.Sheets("Tabelle1").Range("E2")

im Zielblatt immer wieder die Zelle E2
Wo also, sollen die Daten im Zielblatt hin?
Gruß Werner
Anzeige
habe eben den Eingangsbeitrag...
10.06.2020 18:28:23
Werner
Hallo,
...nochmal gelesen.
Ich denke du willst das hier:
Sub Transfer()
Dim rngZelle As Range, wbStart As Workbook, wbZiel As Workbook
Set wbZiel = ThisWorkbook
Set wbZiel = Workbooks.Open("C:\Users\benutzername\Desktop\Dateninput.xlsx")
With wbStart.Worksheets("Tabelle1")
For Each rngZelle In .Range("B1:B" & .Cells(.Rows.Count, "B").End(xlUp).Row)
If rngZelle > 0.25 Then
With wbZiel.Worksheets("Tabelle1")
.Cells(.Cells(.Rows.Count, "E").End(xlUp).Offset(1).Row, "E").Resize(, 2).Value = _
rngZelle.Offset(, -1).Resize(, 2).Value
End With
End If
Next rngZelle
End With
Set wbStart = Nothing: Set wbZiel = Nothing
End Sub
Gruß Werner
Anzeige
AW: habe eben den Eingangsbeitrag...
11.06.2020 06:37:50
GismoTB
Guten Morgen Werner,
erst Mal vielen lieben dank für deine Hilfe.
ich möchte das du die Spalte B eine Schleife läuft und nach Werten größer 0,25 sucht.
Wenn ein Werte gefunden wird, sollen die Werte aus Spalte a und b in das Dokument Dateninput in die Spalte E und F kopiert werden.
Ich habe dein Skript heute morgen mal probiert. Bei
With wbStart.Worksheets("Tabelle1")
hängt es mit dem Vermerkt, dass die Variable nicht festgelegt ist.
Anzeige
AW: habe eben den Eingangsbeitrag...
11.06.2020 08:52:35
Werner
Hallo,
mein Fehler, die habe ich ja auch nicht zugewiesen. Ich hab versehentlich zweimal Set wbZiel und die erste Set Anweisung muss natürlich Set wbStart... lauten.
Gruß Werner
AW: habe eben den Eingangsbeitrag...
11.06.2020 09:24:45
GismoTB
Hallo Werner,
ich bin begeistert.
Herzlichen Dank!
Viele Grüße
Thomas
Gerne u. Danke für die Rückmeldung. o.w.T.
11.06.2020 09:32:32
Werner
Anzeige
AW: VBA Datentransfer in anderes Workbook
10.06.2020 18:58:29
ralf_b
ja die mußt du definieren, und der Werner hat das schon getan. dem flutscht das einfach so aus dem handgelenk. :)
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Datentransfer in ein anderes Workbook


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (deinWorkbookName) und wähle Einfügen > Modul.

  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub Transfer()
        Dim rngZelle As Range
        Dim wbStart As Workbook
        Dim wbZiel As Workbook
        Dim cnt As Long
        cnt = 2
    
        Set wbStart = ActiveWorkbook
        Set wbZiel = Workbooks.Open("C:\Users\benutzername\Desktop\Dateninput.xlsx")
    
        For i = 1 To wbStart.Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
            If wbStart.Worksheets("Tabelle1").Cells(i, 2).Value > 0.25 Then
                wbZiel.Worksheets("Tabelle1").Cells(cnt, "E").Value = wbStart.Worksheets("Tabelle1").Cells(i, 1).Value
                wbZiel.Worksheets("Tabelle1").Cells(cnt, "F").Value = wbStart.Worksheets("Tabelle1").Cells(i, 2).Value
                cnt = cnt + 1
            End If
        Next i
    
        wbZiel.Close SaveChanges:=True
    End Sub
  4. Code anpassen: Passe den Pfad zur Zieldatei an und stelle sicher, dass die Blattnamen korrekt sind.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus.


Häufige Fehler und Lösungen

  • Fehler: Variable nicht festgelegt
    Stelle sicher, dass alle Variablen, wie wbStart und wbZiel, korrekt zugewiesen sind.

  • Fehler: Überlauf
    Achte darauf, dass der Wert cnt nicht über die maximalen Zeilen in wbZiel hinausgeht.

  • Fehler: Zellen überschreiben
    Wenn du immer wieder in die gleiche Zelle schreibst, verwende cnt als Zähler, um die nächsten freien Zeilen zu finden.


Alternative Methoden

  • Mit Worksheet VBA: Verwende With-Anweisungen, um den Code lesbarer und effizienter zu gestalten:

    With wbStart.Worksheets("Tabelle1")
        ' Dein Code hier
    End With
  • Workbook schreiben: Anstatt die Zieldatei zu öffnen, kannst du auch eine neue Datei erstellen und die Daten dort speichern.


Praktische Beispiele

Hier ist ein Beispiel für den Code, der die Werte aus Spalte A und B in ein anderes Workbook überträgt:

Sub TransferBeispiel()
    Dim wbStart As Workbook
    Dim wbZiel As Workbook
    Dim i As Long
    Dim cnt As Long
    cnt = 2

    Set wbStart = ThisWorkbook
    Set wbZiel = Workbooks.Add ' Neues Workbook erstellen

    For i = 1 To wbStart.Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
        If wbStart.Worksheets("Tabelle1").Cells(i, 2).Value > 0.25 Then
            wbZiel.Worksheets(1).Cells(cnt, 1) = wbStart.Worksheets("Tabelle1").Cells(i, 1).Value
            wbZiel.Worksheets(1).Cells(cnt, 2) = wbStart.Worksheets("Tabelle1").Cells(i, 2).Value
            cnt = cnt + 1
        End If
    Next i
End Sub

Tipps für Profis

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um mögliche Probleme beim Öffnen der Datei oder beim Kopieren der Werte zu behandeln.

  • Leistungsoptimierung: Deaktiviere die Bildschirmaktualisierung mit Application.ScreenUpdating = False am Anfang des Codes und aktiviere sie am Ende wieder.


FAQ: Häufige Fragen

1. Muss ich die letzte Zeile definieren?
Ja, du musst die letzte Zeile definieren, um sicherzustellen, dass du nur die relevanten Daten durchläufst. Das erfolgt oft mit letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row.

2. Wie kann ich mehrere Spalten kopieren?
Du kannst Resize verwenden, um mehrere Spalten gleichzeitig zu kopieren, wie in den Beispielen gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige