Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte aus verschiedenen Tabellenblättern kopieren

Werte aus verschiedenen Tabellenblättern kopieren
08.04.2015 09:36:19
Iris
Hi!
Ich möchte aus einer Excel-Datei mit einem CommandButton Werte (Spalte B bis F) aus allen Tabellenblättern außer "Monatg" und "Dienstag" in ein bestimmtes Blatt genannt "Test" untereinander kopieren.
Ich habe dazu unten stehenden Code, der macht aber noch nicht ganz genau das, was ich will. Dieser Code kopiert mir Spalte B bis F in mein Zielblatt "Test" ab Zeile 8, von allen Blättern, außer "Montag" und "Dienstag".
Ich hätte zusätzlich noch gerne, dass nicht nur Zeile 2 bis 4 von jedem Blatt kopiert werden, sondern alle Zeilen in denen etwas steht. Das heißt die Zeilenbeschränkung soll variabel sein.
Außerdem sollen nur die Zeilen aus allen Blättern kopiert werden, die in Spalte B mit "K" anfangen.
Hier der Code:
Private Sub CommandButton1_Click()
Dim Zeile As Long, Spalte As Long, a As Long
Application.ScreenUpdating = False
a = 8
Set wks = Worksheets("Test")
For Each ws In Worksheets
If ws.Name  "Montag" And ws.Name  "Dienstag" And ws.Name  "Test" Then
For Zeile = 2 To 4
For Spalte = 2 To 6
If ws.Cells(Zeile, Spalte) > 0 Then
wks.Cells(a, Spalte) = ws.Cells(Zeile, Spalte)
End If
Next Spalte
a = wks.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row + 1
Next Zeile
End If
Next ws
End Sub
Vielen Dank schon jetzt!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte aus verschiedenen Tabellenblättern kopie
08.04.2015 09:50:20
Klexy
Statt
For Zeile = 2 To 4

dieses:
For Zeile = 2 To ws.UsedRange.Rows.Count
Das kopiert dir alle Zeilen.
Achtung: manchmal hat man versehentlich unnütze Leerzeilen am Ende einer Tabelle. Die würden hier mitkopiert werden.
Für "in denen was steht" müsste man wissen, an welcher Spalte sich das orientieren soll, oder könnte mal in Spalte B und mal nur in Spalte C usw. was stehen?

AW: Werte aus verschiedenen Tabellenblättern kopie
08.04.2015 10:03:30
Iris
Ok cool. Das "in denen was steht" orientiert sich an Spalte B.
Genauer gesagt möchte ich alle Zeilen (von Spalte B bis F) in das Zielblatt "Test" kopieren, die in Spalte B mit "K" beginnen. Was nach "K" kommt ist egal.

Anzeige
AW: Werte aus verschiedenen Tabellenblättern kopie
08.04.2015 14:29:23
Iris
Ok also soweit klappt das mit den Zeilen. Dauert bloß sehr lange, weil ich 20 Tabellenblätter mit jeweils 120 Zeilen habe, die ich alle untereinander in "Test" kopieren möchte. Deswegen will ich auch nur die Zeilen kopieren, die in der Spalte B mit "K" anfangen.

AW: Werte aus verschiedenen Tabellenblättern kopie
09.04.2015 09:37:23
Klexy

Private Sub CommandButton1_Click()
Dim Zeile As Long, Spalte As Long, a As Long
Set wks = Worksheets("Test")
a = 8
Application.ScreenUpdating = False
For Each ws In Worksheets
If ws.Name  "Montag" And ws.Name  "Dienstag" And ws.Name  "Test" Then
For Zeile = 2 To ws.UsedRange.Rows.Count
For Spalte = 2 To 6
If Left(ws.Cells(Zeile, 2), 1) = "K" Then
'If Left(ws.Cells(Zeile, 2), 1) = "K" Or Left(ws.Cells(Zeile, 2), 1) = "k" Then
'If UCase(Left(ws.Cells(Zeile, 2), 1)) = "K" Then
wks.Cells(a, Spalte) = ws.Cells(Zeile, Spalte)
End If
Next Spalte
a = wks.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row + 1
Next Zeile
End If
Next ws
Application.ScreenUpdating = True
End Sub
Ich hab noch ein Application.ScreenUpdating = True ans Ende gesetzt, sonst fehlt es dir nach Abarbeiten des Makros.
Die Änderung, um auf K zu reagieren, muss nur in der Zeile geändert werden:
If Left(ws.Cells(Zeile, 2), 1) = "K" Then

Dabei reagiert es aber nur auf K und nicht auf k.
Wenn es auf beide reagieren soll, dann sieht die Zeile so aus:
If Left(ws.Cells(Zeile, 2), 1) = "K" Or Left(ws.Cells(Zeile, 2), 1) = "k" Then

oder eleganter:
If UCase(Left(ws.Cells(Zeile, 2), 1)) = "K" Then

Anzeige
AW: Werte aus verschiedenen Tabellenblättern kopie
09.04.2015 15:03:03
Iris
Oh super Danke! Die Anpassung ist ausreichend:

If Left(ws.Cells(Zeile, 2), 1) = "K" Then
Allerdings habe ich jetzt ein anderes Problem.
Es kommt der Laufzeitfehler 91: "Objektvariable ofer With-Blockvariable nicht festgelegt".
Beim Debuggenwir die Zeile angezeigt:

a = wks.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row + 1
Kann es vielleicht sein, dass .Find bei xlPrevious nichts mehr findet?
Ich bin etwas ratlos

AW: Werte aus verschiedenen Tabellenblättern kopie
09.04.2015 16:38:46
Klexy
Keine Ahnung. Bei mir funktioniert es. Diese Zeile kommt von dir.
Ich kannte diese Möglichkeit gar nicht.
Ich hätte es so gemacht:
Private Sub CommandButton1_Click()
Dim Zeile As Long, Spalte As Long, a As Long
Set wks = Worksheets("Test")
a = 8
Application.ScreenUpdating = False
For Each ws In Worksheets
If ws.Name  "Montag" And ws.Name  "Dienstag" And ws.Name  "Test" Then
For Zeile = 2 To ws.UsedRange.Rows.Count
For Spalte = 2 To 6
If Left(ws.Cells(Zeile, 2), 1) = "K" Then
'If Left(ws.Cells(Zeile, 2), 1) = "K" Or Left(ws.Cells(Zeile, 2), 1) = "k" Then
'If UCase(Left(ws.Cells(Zeile, 2), 1)) = "K" Then
wks.Cells(a, Spalte) = ws.Cells(Zeile, Spalte)
If Spalte = 6 Then
a = a + 1
End If
End If
Next Spalte
'a = wks.Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row + 1
Next Zeile
End If
Next ws
Application.ScreenUpdating = True
End Sub
Der Zeilenzähler wird hier hochgesetzt:
If Spalte = 6 Then
a = a + 1
End If

Anzeige
AW: Werte aus verschiedenen Tabellenblättern kopie
10.04.2015 11:43:24
Iris
Super, das klappt! Dauert bloß ewig, aber ich schätze das liegt an den 20 Tabellenblättern die durchsucht werden müssen...
Vielen Dank :)

AW: Werte aus verschiedenen Tabellenblättern kopie
10.04.2015 12:25:45
Klexy
Ob das schneller geht, weiß ich nicht. Wenn, dann nur minimal, weil er ja alles durchsuchen und überprüfen muss.
Holst dir halt derweil eine Tasse Kaffee und schon ist es vorbei.

331 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige