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")

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.

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"

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

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
Symbol

Versuchen Sie es mit dem Code-VBA-Editor-Add-In