anna2701
Goto Top

Mit VBA prüfen, ob Tabellenblatt existiert

Hallo zusammen,

ich habe folgendes Problem: Ich prüfe in meinem Code, ob ein Tabellenblatt existiert und wenn es existiert soll es gelöscht werden. Soweit so gut. Allerdings wird ein Teil des Names des Tabellenblatts aus einer Combobox ausgelesen. Der Name wird wie folgt erzeugt: "DiagrammNNZ_" & Tabelle4.ComboBox1.Text
Wenn ich aber folgenden Code schreibe, wird nur versucht, das Tabellenblatt zu löschen, welche Bezeichnung gerade in der Combobox ausgewahlt ist und nicht alle Bezeichungen die es in der Combobox auszuwählen gibt. Ich hoffe, ihr versteht mich face-sad

On Error Resume Next
If Worksheets("DiagrammNNZ_" & Tabelle4.ComboBox1.Text ) Is Nothing Then
On Error GoTo 0
Sheets("DiagrammNNZ_" & Tabelle4.ComboBox1.Text ).Delete
End If


Liebe Grüße, Anna

Content-ID: 257674

Url: https://administrator.de/contentid/257674

Ausgedruckt am: 22.11.2024 um 13:11 Uhr

colinardo
colinardo 15.12.2014 aktualisiert um 13:41:20 Uhr
Goto Top
Hallo Anna,
wenn ich dich richtig verstanden habe erreichst du das Gewünschte mit folgendem Code
Dim ws As Worksheet, strSuchname As String
Application.DisplayAlerts = False
strSuchname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
For Each ws In Worksheets
    If Left(ws.Name, Len(strSuchname)) = strSuchname Then
        ws.Delete
    End If
Next
Application.DisplayAlerts = True
Grüße Uwe

p.s. Bitte nutze in Zukunft Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.
Anna2701
Anna2701 15.12.2014 um 13:46:26 Uhr
Goto Top
Es funktioniert noch nicht so ganz. Es gibt dann einen Fehler in Zeile 21.

'Alte Tabellenblätter löschen  

Dim ws As Worksheet, strSuchname As String
Application.DisplayAlerts = False
strSuchname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
For Each ws In Worksheets
    If Left(ws.Name, Len(strSuchname)) = strSuchname Then
        ws.Delete
    End If
Next
Application.DisplayAlerts = True


'Neues Tabellenblatt erzeugen (DiagrammNNZ - <Auswahl von Kombobox>)  


        Dim strDiagrammanme  ' Names des Diagrammblattes  
        strDiagrammname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.Location xlLocationAsNewSheet, "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
        With ActiveChart
            .SeriesCollection.NewSeries
            .SetSourceData Source:=Tabelle4.Range(Tabelle4.Cells(i, j), Tabelle4.Cells(i, 5)) ' Range auf horizontal ändern  
            .SeriesCollection(1).XValues = Tabelle4.Range(Tabelle4.Cells(k, l), Tabelle4.Cells(k, 5))
        End With
        With ActiveChart.Axes(xlValue)
            .MinimumScale = 0
            .MaximumScale = ymax
        End With
colinardo
colinardo 15.12.2014 aktualisiert um 13:49:48 Uhr
Goto Top
Zitat von @Anna2701:

Es funktioniert noch nicht so ganz. Es gibt dann einen Fehler in Zeile 21.
Mein Code funktioniert, ist wohl eher deinem Code geschuldet, weil du dein Sheet mit dem neuen Namen natürlich erst vorher erstellen musst face-wink das hast du vergessen...
Anna2701
Anna2701 15.12.2014 um 13:52:06 Uhr
Goto Top
Der Fehler entsteht nur, wenn das Tabellenblatt existiert. Lösche ich das Tabellenblatt manuell, funktioniert es. face-sad
colinardo
Lösung colinardo 15.12.2014, aktualisiert am 17.12.2014 um 10:49:57 Uhr
Goto Top
Zitat von @Anna2701:
Der Fehler entsteht nur, wenn das Tabellenblatt existiert. Lösche ich das Tabellenblatt manuell, funktioniert es. face-sad
Das kommt weil Ihr immer nur den Code des Makrorekorders blind kopiert, ohne den Code zu verstehen face-wink
'Alte Tabellenblätter löschen  
    Dim ws As Worksheet, strSuchname As String
    Application.DisplayAlerts = False
    strSuchname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
    For Each ws In Worksheets
        If Left(ws.Name, Len(strSuchname)) = strSuchname Then
            ws.Delete
        End If
    Next
    Application.DisplayAlerts = True

'Neues Tabellenblatt erzeugen (DiagrammNNZ - <Auswahl von Kombobox>)  

    Dim strDiagrammanme  ' Names des Diagrammblattes  
    Dim chartNew As Chart
    strDiagrammname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
    
    Set chartNew = Application.Charts.Add
    With chartNew
        .ChartType = xlColumnClustered
        .Name = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text  
        .SeriesCollection.NewSeries
        .SetSourceData Source:=Tabelle4.Range(Tabelle4.Cells(i, j), Tabelle4.Cells(i, 5)) ' Range auf horizontal ändern  
        .SeriesCollection(1).XValues = Tabelle4.Range(Tabelle4.Cells(k, l), Tabelle4.Cells(k, 5))
    End With
    With chartNew.Axes(xlValue)
        .MinimumScale = 0
        .MaximumScale = ymax
    End With
Anna2701
Anna2701 15.12.2014 um 14:34:49 Uhr
Goto Top
Da hast du leider recht! face-sad
Es entsteht immer noch ein Fehler. Immer noch Zeile 21. Fehler:
Laufzeitfehler '1004':

Kann einem Blatt nicht den gleichen Namen geben wie einem anderen Blatt, einer Objektbibliothek oder einer Arbeitsmappe, auf der Visual Basic Bezug nimmt.
colinardo
colinardo 15.12.2014 aktualisiert um 14:38:36 Uhr
Goto Top
Zitat von @Anna2701:

Da hast du leider recht! face-sad
Es entsteht immer noch ein Fehler. Immer noch Zeile 21. Fehler:
Laufzeitfehler '1004':
hier läuft es einwandfrei, du musst uns hier also noch irgendetwas verschweigen !
Kann einem Blatt nicht den gleichen Namen geben wie einem anderen Blatt, einer Objektbibliothek oder einer Arbeitsmappe, auf der Visual Basic Bezug nimmt.
Jedes Blatt muss einen eindeutigen Namen haben, zwei Mappen mit gleichem Namen geht nicht.
Anna2701
Anna2701 17.12.2014 um 10:04:35 Uhr
Goto Top
Es funktioniert mittlerweile. Ich habe aber ein neues Problem.
Ich erstelle mit meinem Code ein neues Tabellenblatt, wo das Diagramm drauf erzeugt wird. Ich möchte aber bis zu 8 Diagramme auf diesem Tabellenblatt anzeigen lassen.

DiagrName = "DiagrammNutzungsNebenzeit"  

i = 40
j = 1
k = 38
l = 2

Cells(13, 1).Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.Location xlLocationAsNewSheet, "DiagrammNutzungsNebenzeit"  
ActiveChart.SetSourceData Source:=Range(Tabelle4.Cells(i, j), Tabelle4.Cells(i, 5))
ActiveChart.SeriesCollection(1).XValues = Tabelle4.Range(Tabelle4.Cells(k, l), Tabelle4.Cells(k, 5))


ActiveChart.CopyPicture (xlScreen)
Sheets("DiagrammNutzungsNebenzeit").Paste  

Kann ich mit dem Code arbeiten oder muss ich den komplett neu schreiben?
colinardo
Lösung colinardo 17.12.2014 aktualisiert um 10:49:47 Uhr
Goto Top
Ich habe aber ein neues Problem.
neues Problem > neuer Thread !
Sonst würde das Forum hier zu einem heillosen Durcheinander mutieren, merci.

Grüße Uwe

Und den Beitrag dann bitte noch als gelöst markieren. Danke.