Tabellenblätter mit Objektname variabel ansprechen
Schritt-für-Schritt-Anleitung
Um Tabellenblätter mit einem variablen Objektnamen anzusprechen, kannst du den folgenden VBA-Code verwenden. Dieser Code durchläuft alle Arbeitsblätter in deiner Arbeitsmappe und prüft, ob das angegebene Shape vorhanden ist.
Option Explicit
Public Sub Beispiel()
Dim objWorksheet As Worksheet 'Worksheet name
Dim objShape As Shape 'Shape name
For Each objWorksheet In ThisWorkbook.Worksheets
For Each objShape In objWorksheet.Shapes
If objShape.Name = "Ellipse 1.1" Then
' Tu was
End If
Next objShape
Next objWorksheet
End Sub
Dieser Code ist einfach gehalten und eignet sich für Excel-Versionen ab 2010. Achte darauf, dass der Name des Shapes genau übereinstimmt.
Häufige Fehler und Lösungen
-
Shape nicht gefunden
- Problem: Der angegebene Name des Shapes ist falsch.
- Lösung: Überprüfe den Namen des Shapes in der Excel-Oberfläche. Du kannst den Namen auch im VBA-Editor mit
Debug.Print objShape.Name
ausgeben lassen.
-
Laufzeitfehler 9: Index außerhalb des gültigen Bereichs
- Problem: Das angegebene Arbeitsblatt existiert nicht.
- Lösung: Stelle sicher, dass du nur auf existierende Arbeitsblätter zugreifst, oder verwende
ThisWorkbook.Worksheets.Count
, um sicherzustellen, dass der Index gültig ist.
Alternative Methoden
Eine Alternative zur Überprüfung der Shapes wäre die Verwendung des Codenames der Arbeitsblätter. Codenamen sind nicht von der Sichtbarkeit des Arbeitsblatts abhängig und bleiben konstant, selbst wenn der sichtbare Name geändert wird.
Sub BeispielMitCodename()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Tabelle1") ' Codenamen verwenden
If Not ws.Shapes("Ellipse 1.1") Is Nothing Then
' Tu was
End If
End Sub
Praktische Beispiele
Hier ist ein weiteres Beispiel, das zeigt, wie du Farben von Shapes kopieren kannst:
Public Sub FarbenKopieren()
Dim objWorksheet As Worksheet
Dim objShape As Shape
Dim i As Integer
Dim j As Integer
For Each objWorksheet In ThisWorkbook.Worksheets
For Each objShape In objWorksheet.Shapes
For i = 1 To 48
If objShape.Name = "Gruppieren " & i Then
If Not objWorksheet.Name = "Production Processes" Then
For j = 1 To 4
Tabelle10.Shapes("Ellipse " & i & "." & j).Fill.ForeColor.RGB = _
objWorksheet.Shapes("Ellipse " & i & "." & j).Fill.ForeColor.RGB
Next j
MsgBox objWorksheet.Name
End If
End If
Next i
Next objShape
Next objWorksheet
End Sub
Tipps für Profis
- Debugging: Nutze die
Debug.Print
-Anweisung, um Variablen und die Ausführung deines Codes zu überwachen.
- Struktur: Halte deinen Code modular, indem du Funktionen oder Subroutinen verwendest, um spezifische Aufgaben zu erledigen.
- Fehlerbehandlung: Implementiere
On Error Resume Next
, um Laufzeitfehler abzufangen und den Code nicht abrupt zu stoppen.
FAQ: Häufige Fragen
1. Wie kann ich alle Shapes auf einem Arbeitsblatt auflisten?
Du kannst eine Schleife verwenden, um alle Shapes auf dem Arbeitsblatt durchzugehen und deren Namen auszugeben:
Sub ListeShapes()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.Name
Next shp
End Sub
2. Was mache ich, wenn ich Shapes mit unterschiedlichen Namen überprüfen möchte?
Du kannst eine Liste von Namen in einem Array speichern und dann eine Schleife verwenden, um jeden Namen zu überprüfen:
Dim shapeNames As Variant
shapeNames = Array("Ellipse 1.1", "Ellipse 1.2", "Ellipse 2.1")
For Each name In shapeNames
If Not objWorksheet.Shapes(name) Is Nothing Then
' Tu was
End If
Next name