Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abfrage vorhandener Sheets - falsche RM

Abfrage vorhandener Sheets - falsche RM
05.04.2023 15:25:01
Lloz

Hallo zusammen,

ich versuche über VBA existierende Arbeitsblätter abzufragen und dann bei Bedarf ein neues Arbeitsblatt mit einem bestimmten Namen zu erzeugen. In diesen Arbeitsblättern erstelle ich Diagramme. Das in einer Schleife für > 100 Diagramme und ca. 10 Arbeitsblättern.

Das klappt dann, wenn nach jedem Diagramm ein neues Arbeitsblatt erstellt wird oder mehrere Diagramme in einem Arbeitsblatt erstellt werden.
Es klappt aber dann nicht mehr, wenn mehr als ein Diagramm in einem Arbeitsblatt erstellt wurde und das nächste Diagramm in ein neues Arbeitsblatt müsste.

In der Zeile

If blatt.Name = BlattName Then bolFlg = True
gibt er mir dann bei unterschiedlichen Namen von "blatt.Name" und BlattName True bzw. War aus. Das hat zur folge, das er kein neues Arbeitsblatt erstellt, das Diagramm aber in ein neues Arbeitsblatt eingefügt werden soll -> Fehler.

Ich komme hier nicht weiter. Grundsätzlich funktioniert alles. In der spezielle Konstellation erkennt er aber unterschiedliche Namen als identisch, obwohl es offensichtlich nicht so ist. Wo kann hier der Fehler liegen?


    '** Neues benanntes Tabellenblatt einfügen
    '** Dimensionierung der Variablen
    Dim blatt As Worksheet
    Dim BlattName As String
    Dim bolFlg As Boolean
     
    ' Zeile mit Szenario in Parameter einfügen
    '** Blattname festlegen
    BlattName = Sheets("Statische Berechnung").Cells(6, DiagrammBeginn - 1).Value
         
    '** Prüfen, ob das Blatt, welches eingefügt werden soll bereits vorhanden ist
    '** Nur einfügen, wenn Blatt noch nicht vorhanden ist
    For Each blatt In ThisWorkbook.Worksheets
      If blatt.Name = BlattName Then bolFlg = True
    Next blatt
     
    '** Blatt nur einfügen, wenn noch nicht vorhanden
    If bolFlg = False Then
      With ThisWorkbook
        .Worksheets.Add after:=Sheets(Worksheets.Count)
        .ActiveSheet.Name = BlattName
      End With
    End If


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage vorhandener Sheets - falsche RM
05.04.2023 15:38:09
Daniel
Hi
dh du zeigst und hier nicht den vollständigen Code und es gibt noch eine Schleife, in der der Wert "DiagrammBeginn" geändert wird?
wenn ja, dann vermute ich, dass du vergessen hast, bei mehrfacher Ausführung die Variable bolFlg wieder zurückzusetzen.

dh auch wenn bolFlg beim ersten durchlauf automatsich False ist, sollte man so programmieren:
bolFlg = False
For Each blatt In ThisWorkbook.Worksheets
      If blatt.Name = BlattName Then bolFlg = True
    Next blatt
besser ist aber immer, unnötige Variablen zu vermeiden. du kannst hier bolFlg weglassen und die Schleifenvariable blatt für die Prüfung einsetzen, indem du ausnutzt, dass in einer For-Each-Schleife die Schleifenvariable Nothing ist, wenn die Schleife vollständig durchlaufen wurde und bei einem vorzeitigen Abbruch das Objekt zum Zeitpunkt des Abbruchs enthält.
das ergibt dann:

For Each blatt In ThisWorkbook.Worksheets
      If blatt.Name = BlattName Then exit for
    Next blatt
     
    '** Blatt nur einfügen, wenn noch nicht vorhanden
    If blatt Is Nothing then
       ....
ist eine Variable weniger und man braucht nichts zurückzusetzen, wenn der Code mehrfach durchlaufen wird.
Gruß Daniel


Anzeige
AW: Abfrage vorhandener Sheets - falsche RM
05.04.2023 16:04:49
Rudi Maintaire
Hallo,
 '** Neues benanntes Tabellenblatt einfügen
    '** Dimensionierung der Variablen
    Dim blatt As Worksheet
    Dim BlattName As String
    Dim bolFlg As Boolean
     
    ' Zeile mit Szenario in Parameter einfügen
    '** Blattname festlegen
    BlattName = Sheets("Statische Berechnung").Cells(6, DiagrammBeginn - 1).Value
         
    '** Prüfen, ob das Blatt, welches eingefügt werden soll bereits vorhanden ist
    '** Nur einfügen, wenn Blatt noch nicht vorhanden ist
    On Error Resume Next
    Set blatt = Worksheets(BlattName)
    On Error GoTo 0

     
    '** Blatt nur einfügen, wenn noch nicht vorhanden
    If blatt Is Nothing Then
      Worksheets.Add(after:=Sheets(Worksheets.Count)).Name = BlattName
    End If
Gruß
Rudi


Anzeige
AW: Abfrage vorhandener Sheets - falsche RM
05.04.2023 17:13:46
Luschi
Hallo Lloz,

hab es gerade noch mal getestet - bei mir funktioniert es mit FMT=Delimited(,) statt FMT=Delimited(',')

Gruß von Luschi
aus klein-Paris


falscher Thread, Luschi.
06.04.2023 09:02:01
Rudi Maintaire
Hallo,
sollte wohl zu Script Kid. eins tiefer.

Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige