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

Diagramme in Diagrammblättern erkennen

Forumthread: Diagramme in Diagrammblättern erkennen

Diagramme in Diagrammblättern erkennen
Meppi
Hallo,
ich bin noch VBA-Anfänger und hoffe, dass ihr mir helfen könnt.
Ich habe eine Excel-Datei mit einer Vielzahl von Reitern. Diese Reiter sind abwechselnd Arbeitsblätter und Diagrammblätter. Ich habe die Diagramme bewusst nicht als eingebettete Objekte in die Arbeitsblätter eingefügt.
Folgender VBA-Code soll nun automatisch die optimale Spaltenbreite anpassen, jedoch nur innerhalb der Arbeitsblätter. Die Diagrammblätter sollen davon unberührt bleiben:
Dim i As Long
For i = 1 To Sheets.Count
If Sheets(i).ChartObjects.Count = 0 Then
Sheets(i).Select
Cells.Select
Cells.EntireColumn.AutoFit
End If
Next i
End Sub
Das Problem: Leider werden die Diagramme in den Diagrammblättern nicht durch "ChartObjects" erkannt, d.h. das Makro läuft nicht problemlos durch. Kann mir jemand von euch weiterhelfen?
Vielen Dank im Voraus.
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Diagramme in Diagrammblättern erkennen
{Boris}
Hi,
die Sheets-Auflistung enthält alle Blätter: Tabellenblätter und natürlich auch Diagrammblätter (und noch ein paar mehr).
Für die Tabellenblätter gibt es die Worksheets-Eigenschaft.
Aus der Hand:
For i = 1 To ThisWorkbook.WorkSheets.Count
Noch besser:
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
Dann brauchst Du gar nicht zu prüfen, ob das Blatt ein Diagramm ist.
Grüße Boris
Anzeige
AW: Diagramme in Diagrammblättern erkennen
28.11.2011 08:50:33
Beverly
Hi,
auch wenn dir Boris bereits eine Lösung gepostet hat, hier noch die Möglichkeit wie man prüfen kann, ob es ein Diagrammblatt oder ein Tabellenblatt ist:
Sub BlaetterAnsprechen1()
Dim intBlatt As Integer
For intBlatt = 1 To Sheets.Count
If TypeName(Sheets(intBlatt)) = "Chart" Then
MsgBox "Diagrammblatt"
ElseIf TypeName(Sheets(intBlatt)) = "Worksheet" Then
MsgBox "Arbeitsblatt"
End If
Next intBlatt
End Sub

bzw. so:
Sub BlaetterAnsprechen2()
Dim objBlatt As Object
For Each objBlatt In Sheets
If TypeName(objBlatt) = "Chart" Then
MsgBox "Diagrammblatt"
ElseIf TypeName(objBlatt) = "Worksheet" Then
MsgBox "Arbeitsblatt"
End If
Next objBlatt
End Sub



Anzeige
AW: Diagramme in Diagrammblättern erkennen
28.11.2011 23:24:37
Meppi
Danke euch beiden. Habe eure Vorschläge gleich ausprobiert. Funktionieren beide einwandfrei. Danke nochmal und viele Grüße.
Anzeige
Anzeige

Infobox / Tutorial

Diagramme in Diagrammblättern erkennen


Schritt-für-Schritt-Anleitung

Um die optimale Spaltenbreite für Diagramme in Arbeitsblättern anzupassen, kannst du den folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass nur die Arbeitsblätter angepasst werden und die Diagrammblätter unberührt bleiben:

Sub SpaltenbreiteAnpassen()
    Dim i As Long
    For i = 1 To ThisWorkbook.Worksheets.Count
        Sheets(i).Select
        Cells.Select
        Cells.EntireColumn.AutoFit
    Next i
End Sub

Wenn du sicherstellen möchtest, dass der Code nur auf Arbeitsblätter angewendet wird, kannst du die Worksheets-Eigenschaft nutzen. Hier eine angepasste Version:

Sub SpaltenbreiteAnpassenArbeitsblatter()
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Cells.EntireColumn.AutoFit
    Next Ws
End Sub

Häufige Fehler und Lösungen

Ein häufiger Fehler ist, dass der Code auch Diagrammblätter ansteuert, was du vermeiden möchtest. Stelle sicher, dass du die Worksheets-Eigenschaft verwendest, um nur auf Arbeitsblätter zuzugreifen.

Wenn du fälschlicherweise versuchst, Diagrammobjekte über ChartObjects zu erkennen, wird der Code nicht wie gewünscht ausgeführt. Prüfe deine Schleife und stelle sicher, dass du die richtige Eigenschaft verwendest:

If TypeName(Sheets(i)) = "Chart" Then
    ' Dies ist ein Diagrammblatt, überspringe es
Else
    ' Hier kannst du dein Code für Arbeitsblätter einfügen
End If

Alternative Methoden

Wenn du alternative Methoden zur Identifikation von Diagrammblättern benötigst, kannst du den folgenden VBA-Code verwenden, um zwischen Diagrammblättern und Arbeitsblättern zu unterscheiden:

Sub BlaetterAnsprechen()
    Dim objBlatt As Object
    For Each objBlatt In Sheets
        If TypeName(objBlatt) = "Chart" Then
            MsgBox "Diagrammblatt erkannt"
        ElseIf TypeName(objBlatt) = "Worksheet" Then
            MsgBox "Arbeitsblatt erkannt"
        End If
    Next objBlatt
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung der oben genannten Methoden:

  1. Anpassen der Spaltenbreite in einer Datei mit Diagrammblättern: Verwende den oben genannten Code, um die Spaltenbreiten in allen Arbeitsblättern anzupassen, ohne die Diagrammblätter zu verändern.

  2. Erkennen von Diagrammblättern: Mit dem BlaetterAnsprechen-VBA-Code kannst du schnell feststellen, welche Blätter Diagrammblätter sind.


Tipps für Profis

  • Nutze die Funktionen von Excel VBA effizient, indem du die Eigenschaften von Objekten wie Worksheets und Charts gut kennst.
  • Vermeide unnötige Select-Befehle, um die Ausführung deines Codes zu beschleunigen. Arbeite direkt mit den Objekten.
  • Verwende Option Explicit am Anfang deines Codes, um sicherzustellen, dass alle Variablen deklariert sind, was die Fehlersuche erleichtert.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einem Diagrammblatt und einem Arbeitsblatt? Ein Diagrammblatt ist ein spezieller Blättertyp, der nur Diagramme enthält, während Arbeitsblätter Daten und Formeln enthalten.

2. Wie kann ich sicherstellen, dass mein VBA-Code nur auf Arbeitsblätter zugreift? Verwende die Worksheets-Eigenschaft, um nur auf Arbeitsblätter zuzugreifen und Diagrammblätter zu ignorieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige