Ein Arbeitsblatt mit VBA in Excel auswählen
Auf dieser Seite werden verschiedene Möglichkeiten vorgestellt, ein Arbeitsblatt anhand des Namens oder der Nummer auszuwählen, mit dem gearbeitet werden soll.
Es wird als wichtig erachtet, ein Arbeitsblatt und Arbeitsmappenvariablen zu verwenden, anstatt sich auf das Activesheet
zu verlassen.
Obwohl ein kurzer Code für den Zugriff auf ein Arbeitsblatt zur Verfügung steht, kann die Verwendung von CodeName
zu Fehlern führen, da sie nur unter bestimmten Bedingungen funktioniert.
Es wurden zwei mögliche Fehlerbedingungen und deren Behandlung erörtert.
Arbeitsblatt nach Name auswählen
Die Item
Eigenschaft der Worksheets
Sammlung wird verwendet, um ein einzelnes Worksheet-Objekt aus der Sammlung zurückzugeben.
Ein Beispiel dafür ist die folgende Aufforderung:
Dim ws As Worksheet
Set ws = Application.ActiveWorkbook.Worksheets.Item(Index:="data")
Die Sammlung Worksheets
wird hier durch einen Workbook.Worksheets
Prozeduraufruf erhalten.
Die Prozedur Item
gibt ein Objekt vom Typ Worksheet
zurück, das optional einer Variablen ws
zugewiesen wird.
... oder kürzer:
Dim ws As Worksheet
Set ws = Worksheets(Index:="data")
- Wenn
Worksheets
aufgerufen wird, ohne die Arbeitsmappe anzugeben, geht Excel davon ausApplication.ActiveWorkbook
- Eine gängige Praxis bei Sammlungsgegenständen ist die Verwendung einer Kurzschrift: Statt der vollständigen
collection.Item(...)
die kürzerecollection(...)
verwendet wird. - Da es die Sache nicht klarer macht, lassen wir auch die
Item
Parametername(Index:=...)
ActiveWorkbook
Methode zur Bereitstellung der übergeordneten Workbook
Objekt, dessen Worksheets
Sammlung verwendet wird. In echtem Code ist die Verwendung von explizit deklarierten und zugewiesenen Objektvariablen im vorliegenden Fall vorzuziehen: Dim wb As Workbook
: Set wb = ActiveWorkbook
, sehr wahrscheinlich mit einem anderen Objektzuweisungsausdruck.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim wsData As Worksheet
Set wsData = wb.Worksheets("Data")
Blatt nach Indexnummer auswählen
Ein Arbeitsblatt kann auch durch seine Nummer in der Sammlung identifiziert werden, wobei Sheet(1) dem ersten Arbeitsblatt entspricht.
Dim ws As Worksheet
Set ws = Worksheets(1)
Sheets oder Worksheets
Sie können ein Arbeitsblatt auch aus der Sammlung der Arbeitsmappe Sheets
beziehen. Letztere enthält alle Blätter der Arbeitsmappe:
Neben den Arbeitsblättern auch Diagramme (Diagrammblätter).
Wenn Sie ein Arbeitsblatt zurückerhalten möchten, ist es am sichersten, Worksheets
zu verwenden und den Typ genau anzugeben.
Charts
enthält,
wird die Anzahl der Blätter unterschiedlich sein. Zum Beispiel, wenn Ihre Arbeitsmappe mit einem Diagramm beginnt, gefolgt von einem Arbeitsblatt,
wird Sheets(2)
das gleiche Arbeitsblatt sein wie Worksheets(1)
.
Arbeitsblatt nach Variablennamen auswählen
Außer bei Makros für allgemeine Zwecke werden Sie oft wissen, wie die Arbeitsblätter heißen, auf die Ihr Makro wirkt.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Worksheets(strWorksheet)
Dennoch kann der Blattname ein variables Element enthalten, z.B. das Datum (formatiert) eines Produktionsberichts als csv-Datei.
In einem solchen Fall können Sie die Arbeitsblätter in einer Schleife durchlaufen, wobei der Platzhalter Like "...*"
das gewünschte Arbeitsblatt mit einem Namen, der mit "Data" beginnt und einem nicht spezifizierten Ende:
Dim wsData As Worksheet
Dim ws As Worksheet
For Each ws In wb.Worksheets
If ws.Name Like "Data*" Then
Set wsData = ws
Exit For
End If
Next ws
Arbeitsblatt nach Codename auswählen
Wenn Ihr Makro nur auf den Blättern der Arbeitsmappe arbeiten muss, in der sich das Makro befindet, können Sie eine kürzere Syntax verwenden:
Sheet1.Range("A1").Value = "Hello world"
Worksheet.CodeName
kann nur Blätter in ThisWorkbook
zurückgeben.
Blatt nach links auswählen
Verwenden Sie die Eigenschaft Previous
, um das Blatt nach links zu holen. Verwenden Sie die Eigenschaft Next
, um das Blatt auf der rechten Seite zu erhalten.
Dim wsPrevious As Worksheet
Set wsPrevious = Sheet2.Previous
If Not wsPrevious Is Nothing Then
End If
- Es ist klar, dass es nicht immer ein vorheriges Blatt gibt.
Bevor Sie also mit dem ausgewählten Blatt arbeiten, sollten Sie sich vergewissern:
Not wsPrevious Is Nothing
. Dies wird Laufzeitfehler 9: Subscript außerhalb des Bereichs verhindern. - Wenn Sie auch Diagrammblätter in Ihrer Arbeitsmappe haben, sollten Sie den Code vorsichtiger gestalten, um zu verhindern, dass
entweder durch Hinzufügen einer Fehlerbehandlung oder durch Deklarieren der neuen
Variablen als
Object
und überprüfen, ob es sich um den von Ihnen gewünschten Typ handelt.
Blatt rechts auswählen
Verwenden Sie die Eigenschaft Next
, um das Blatt nach rechts zu verschieben.
Dim wsNext As Worksheet
Set wsNext = Sheet2.Next
Arbeitsblattbereich auswählen
Letztendlich werden Sie wahrscheinlich Dinge mit einem Bereich im Arbeitsblatt tun wollen, für den Sie eine Range
Variable verwenden werden.
Dim strWorkbook As String: strWorkbook = "Demo.xlsm"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Sheets(strSheet)
Dim rng As Range
Set rng = ws.Range("A2:B6")
Laufzeitfehler 9: Subscript außerhalb des Bereichs
Wenn der Index
auf ein Element verweist, das in der Sammlung nicht vorhanden ist, wird der Laufzeitfehler 9: Index außerhalb des gültigen Bereichs zurückgegeben.
Abhängig von der tatsächlichen Verwendung können Sie eine Fehlerbehandlung hinzufügen.
Sub Demo()
On Error GoTo HandleError
Set ws = Worksheets("xxx")
HandleExit:
Exit Sub
HandleError:
MsgBox Err.Description
Resume HandleExit
End Sub
Ereignis 'Arbeitsblatt' öffnen
Sie können die Prozedur Worksheet_Activate() verwenden, die ausgeführt wird, wenn das Blatt ausgewählt wird. Um den Code hinzuzufügen, öffnen Sie das Arbeitsblattmodul (wählen Sie im Projekt-Explorer) und wählen Sie in der linken Modulkombination Worksheet und in der rechten Combo Activate. Dadurch wird ein leerer Codeblock eingefügt, den Sie dann vervollständigen:
Private Sub Worksheet_Activate()
MsgBox "Hi! I'm " & Me.Name & ", who are you?"
End Sub
Autor: Mark Uildriks Referenz: Worksheets.Item() | Microsoft Learn