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

Tabellenblätter mit Objektname variabel ansprechen

Forumthread: Tabellenblätter mit Objektname variabel ansprechen

Tabellenblätter mit Objektname variabel ansprechen
20.06.2018 08:07:41
IXCANYON
Hallo liebes Forum,
ich konnte leider noch nichts entsprechendes finden. VIlleicht habt ihr die Lösung.
Ich würde gerne mehrere Tabellenblätte pürfen ob ein Shape vorhanden ist z.B. Ellipse 1 und wenn ja dann eine Aktion ausführen.
Ich würde aber gerne die Tabellenblätter mit dem Objektnamen ansprechen da der Nutezr die sichtbaren Namen der Tabellenblätter ändern kann.
Bis jetzt habe ich eine If-Bedingung aber mir fehlt der Teil das Sheet2 also die 2 z.b. Variabel aufzubauen. Sheets(i) ist nicht die Lösung so wie ich es verstehe.
If Not Sheets2.Shapes.Range(Array("Ellipse 1.1")) Is Nothing Then
"Tu was"
End If
Habt ihr eine Idee?
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sheets2.Shapes("Ellipse 1.1") - o.w.T.
20.06.2018 08:24:39
Beverly


AW: Codename
20.06.2018 08:28:55
Fennek
Hallo,
die Abfrage des Codenames hängt von der Sprachversion ab, in dt "Tabelle1" usw, in eng "Sheet1" usw.
Bei den Namen der Shapes gibt es auch "Sprach-Wirrwar", mal dt "Ellipse", mal eng "eclips". Da macht es Sinn zuerst zu prüfen:

sub T_1()
dim Shp as shape
for i = 1 to sheets.count
for each shp in sheets(i).shapes
debug.print shp.name
next shp
next i
end sub
mfg
(aus dem Gedächtnis)
Anzeige
Tabellenblätter mit Objektname variabel ansprechen
20.06.2018 08:41:51
Nepumuk
Hallo,
würde ich so machen:
Option Explicit
Public Sub Beispiel()
Dim objWorksheet As Worksheet
Dim objShape As Shape
For Each objWorksheet In ThisWorkbook.Worksheets
For Each objShape In objWorksheet.Shapes
If objShape.Name = "Ellipse 1.1" Then
'tu was
End If
Next
Next
End Sub

Gruß
Nepumuk
Anzeige
Tabellenblätter mit Objektname variabel ansprechen
20.06.2018 11:40:13
IXCANYON
Nochmals vielen Dank für euren Input, habe jetzt eure Lösungen auf mein Problem maßgeschneidert:
Option Explicit
Public Sub Beispiel()
Dim objWorksheet As Worksheet   'Worksheet name
Dim objShape As Shape           'Shape name
Dim i As Integer                'Counter for grouped shapes
Dim j As Integer                'Counter for single shapse (4 on each sheet)
For Each objWorksheet In ThisWorkbook.Worksheets
For Each objShape In objWorksheet.Shapes
For i = 1 To 48 Step 1
If objShape.Name = "Gruppieren " & i Then 'Check if grouped shape on the sheet
If Not objWorksheet.Name = "Production Processes" Then 'Check if the sheet with  _
the grouped shape is is not the sheet "Production Processes"
For j = 1 To 4 Step 1 'Copy fill color from shape Ellipse 1.1-1.4 to sheet " _
Production Processes"
Tabelle10.Shapes.Range(Array("Ellipse " & i & "." & j)).Fill.ForeColor.RGB =  _
objWorksheet.Shapes.Range(Array("Ellipse " & i & "." & j)).Fill.ForeColor.RGB
Next j
MsgBox objWorksheet.Name
End If
End If
Next i
Next
Next
End Sub

Anzeige
Tabellenblätter mit Objektname variabel ansprechen
20.06.2018 12:26:02
IXCANYON
Nochmals vielen Dank für euren Input, habe jetzt eure Lösungen auf mein Problem maßgeschneidert:
Option Explicit
Public Sub Beispiel()
Dim objWorksheet As Worksheet   'Worksheet name
Dim objShape As Shape           'Shape name
Dim i As Integer                'Counter for grouped shapes
Dim j As Integer                'Counter for single shapse (4 on each sheet)
For Each objWorksheet In ThisWorkbook.Worksheets
For Each objShape In objWorksheet.Shapes
For i = 1 To 48 Step 1
If objShape.Name = "Gruppieren " & i Then 'Check if grouped shape on the sheet
If Not objWorksheet.Name = "Production Processes" Then 'Check if the sheet with  _
the grouped shape is is not the sheet "Production Processes"
For j = 1 To 4 Step 1 'Copy fill color from shape Ellipse 1.1-1.4 to sheet " _
Production Processes"
Tabelle10.Shapes.Range(Array("Ellipse " & i & "." & j)).Fill.ForeColor.RGB =  _
objWorksheet.Shapes.Range(Array("Ellipse " & i & "." & j)).Fill.ForeColor.RGB
Next j
MsgBox objWorksheet.Name
End If
End If
Next i
Next
Next
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

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

  1. 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.
  2. 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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige