Anzeige
Archiv - Navigation
1684to1688
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

SelectedSheets

SelectedSheets
03.04.2019 15:03:59
lanala
Hallo zusammen,
mit etwas Hilfe bin ich zu nem Makro gekommen was mir sehr hilft. Einen Teil davon hier:
Option Explicit
Sub Datenzusammenfassen()
Dim nZeile As Integer
Dim vSpalte As Integer
Dim vZeile As Integer
Dim nSpalte As Integer
Dim vSheet As String
Dim nSheet As String
vSheet = "Tabelle1" ' quellTabellenBlatt
nSheet = "Tabelle1" 'ZielTabellenBlatt
nZeile = 1 'nach Zeile
nSpalte = 26 'nach Spalte
'Spalte B #
vSpalte = 2
For vZeile = 1 To Sheets(vSheet).Cells(65536, vSpalte).End(xlUp).Row
Sheets(nSheet).Cells(nZeile, nSpalte) = Sheets(vSheet).Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
'Spalte J #
vSpalte = 10
For vZeile = 3 To Sheets(vSheet).Cells(65536, vSpalte).End(xlUp).Row
Sheets(nSheet).Cells(nZeile, nSpalte) = Sheets(vSheet).Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
'Spalte R #
vSpalte = 18
For vZeile = 3 To Sheets(vSheet).Cells(65536, vSpalte).End(xlUp).Row
Sheets(nSheet).Cells(nZeile, nSpalte) = Sheets(vSheet).Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
'_______________________________________________________________________________________________
nZeile = 1
'Spalte C RT
vSpalte = 3
For vZeile = 1 To Sheets(vSheet).Cells(65536, vSpalte).End(xlUp).Row
Sheets(nSheet).Cells(nZeile, nSpalte + 1) = Sheets(vSheet).Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next

Nun ist das ganze ja auf Tabelle eins beschränkt. Ich habe jetzt aber gelesen dass es eine Möglichkeit gibt vorausgewählt Sheets zu bearbeiten (SelectedSheets).
Nun dachte ich als Laie ich könnte:
vSheet = "Tabelle1" ' quellTabellenBlatt
nSheet = "Tabelle1" 'ZielTabellenBlatt
nZeile = 1 'nach Zeile
nSpalte = 26 'nach Spalte

durch:
vSheet = "SelectedSheets" ' quellTabellenBlatt
nSheet = "SelectedSheets" 'ZielTabellenBlatt
nZeile = 1 'nach Zeile
nSpalte = 26 'nach Spalte

ersetzen. Dies funktioniert allerdings nicht. Folgende Fehlermeldung erscheint:

Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs

Bei Debuggen wird folgendes markiert:
For vZeile = 1 To Sheets(vSheet).Cells(65536, vSpalte).End(xlUp).Row
Vllt findet sich ja jemand der einem leihen einbisschen unter die arme helfen kann und eventuell auch noch eine kleine Erklärung hinzufügt?
Ich würde mich freuen.
Lieben Gruß an alle

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SelectedSheets
03.04.2019 16:09:44
Daniel
Hallo lanala,
so ganz verstehe ich deinen Code nicht. Warum definierst du zwei Variablen für dasselbe Blatt ("Tabelle1")? So wie dein Code jetzt ist, arbeitest du ja stets im selben Tabellenblatt (Kopieren und Einfügen).
Um den Code für alle ausgewählten Blätter auszuführen, kannst du es so machen:

'Deine Variablen weniger vSheet und nSheet
Dim ws As Worksheet
For Each ws In ActiveWindow.SelectedSheets
'Spalte B #
vSpalte = 2
For vZeile = 1 To ws.Cells(65536, vSpalte).End(xlUp).Row
ws.Cells(nZeile, nSpalte) = ws.Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
'usw....
Next ws
Probier mal.
Gruß
Daniel
Anzeige
AW: SelectedSheets
04.04.2019 09:12:58
lanala
Hallo Daniel,
erstmal vielen Dank für die Mühe. Habe versucht deinen Code anzuwenden, leider funktioniert es nicht. Wahrscheinlich habe ich irgendwo was übersehen? Hier mal der Code:
Option Explicit
Sub Kopieren()
Dim ws As Worksheet
Dim nZeile As Integer
Dim vSpalte As Integer
Dim vZeile As Integer
Dim nSpalte As Integer
For Each ws In ActiveWindow.SelectedSheets
'Spalte B #
vSpalte = 2
For vZeile = 1 To ws.Cells(65536, vSpalte).End(xlUp).Row
ws.Cells(nZeile, nSpalte) = ws.Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
'Spalte J #
vSpalte = 10
For vZeile = 3 To ws.Cells(65536, vSpalte).End(xlUp).Row
ws.Cells(nZeile, nSpalte) = ws.Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
'Spalte R #
vSpalte = 18
For vZeile = 3 To ws.Cells(65536, vSpalte).End(xlUp).Row
ws.Cells(nZeile, nSpalte) = ws.Cells(vZeile, vSpalte)
nZeile = nZeile + 1
Next
Next ws
End Sub
Der angezeigte Fehler ist:
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler

Markiert wird dabei folgende Zeile:
ws.Cells(nZeile, nSpalte) = ws.Cells(vZeile, vSpalte)
Ganz lieben Gruß
Anzeige
AW: SelectedSheets
04.04.2019 09:35:10
Daniel
Hi - du hast vergessen deine Variablen zu bestücken:
nZeile = 1 'nach Zeile
nSpalte = 26 'nach Spalte
Gruß
Daniel
AW: SelectedSheets
04.04.2019 09:38:10
lanala
hallo Daniel,
ist mir gerade eben aufgefallen :D. Wollts grad hier reinschreiben!
Funktioniert super! Vielen Vielen Dank!
Lieben Gruß
Freut mich, gerne!
04.04.2019 09:39:28
Daniel
AW: SelectedSheets
03.04.2019 16:22:16
Matthias
Moin!
SelectedSheets gibt dir nicht den Namen des ausgewählten Blatts zurück sondern eine Auflistung aller ausgewählten Blätter. s.h.: https://docs.microsoft.com/de-de/office/vba/api/excel.window.selectedsheets
In deinem Beispiel könnte der Code so aussehen:
Dim oblatt As Worksheet
Dim ziel As String
For Each oblatt In ActiveWindow.SelectedSheets
If oblatt.Name  ActiveSheet.Name Then
ziel = oblatt.Name
exit for
end if
Next
If ziel = "" Then Exit Sub
vSheet = ziel ' quellTabellenBlatt
nSheet = ziel 'ZielTabellenBlatt
nZeile = 1 'nach Zeile
nSpalte = 26 'nach Spalte

Ich bin mal davon ausgegangen, dass du ein weiteres Blatt selektieren möchtest (also 2 selektierte hatst) und der Code aus einem anderen Blatt gestartet wird. Deshalb prüfe ich noch, ob es das ausgewählte Blatt nicht mit dem aktuellen übereinstimmt. Wenn du aber doch auf das aktuelle willst, kannst du auch gleich activesheet.name für vsheet nehmen. Da brauchst du nicht über selectedsheets gehen.
VG
Anzeige
AW: SelectedSheets
03.04.2019 16:26:55
Daniel
Hi Matthias,
so wird aber immer nur ein Blatt bearbeitet. Wenn ich es richtig verstehe, soll der Code aber über alle ausgewählten Blätter laufen. Vielleicht äußert lanala sich ja noch zu den Rückfragen.
Grüße
Daniel
AW: SelectedSheets
04.04.2019 08:46:07
lanala
Hallo Zusammen,
habe jetzt mal den Code ausprobiert:
Dim oblatt As Worksheet
Dim ziel As String
For Each oblatt In ActiveWindow.SelectedSheets
If oblatt.Name  ActiveSheet.Name Then
ziel = oblatt.Name
exit for
end if
Next
If ziel = "" Then Exit Sub
vSheet = ziel ' quellTabellenBlatt
nSheet = ziel 'ZielTabellenBlatt
nZeile = 1 'nach Zeile
nSpalte = 26 'nach Spalte
Klappt aber jetzt nur für EIN ausgewähltes Tabellenblatt. Wähle ich mehr aus, wird nur das zuletzt gewählte bearbeitet. Ich hätte am liebsten, dass alle ausgewählten Tabellenblätter bearbeitet werden :D. So hatte ich jedenfalls SelectedSheets verstanden ^^ aber das hat ja bei mir nichts zu heißen :D
lieben Gruß
Anzeige
AW: SelectedSheets
04.04.2019 08:55:53
Daniel
Lass mich raten - du hast dir den anderen Vorschlag nicht angesehen. Damit würdest du alle Blätter bearbeiten, es sind aber noch ein paar Fragen zu klären.
AW: SelectedSheets
04.04.2019 09:16:51
lanala
Hey Daniel,
doch klar :). Im anderen Post. Bin nur nicht so schnell ;)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige