Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit VBA prüfen, ob Tabellenblatt existiert

Frage Entwicklung VB for Applications

Mitglied: Anna2701

Anna2701 (Level 1) - Jetzt verbinden

15.12.2014, aktualisiert 17.12.2014, 2232 Aufrufe, 9 Kommentare

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

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
Mitglied: colinardo
15.12.2014, aktualisiert um 13:41 Uhr
Hallo Anna,
wenn ich dich richtig verstanden habe erreichst du das Gewünschte mit folgendem Code
01.
Dim ws As Worksheet, strSuchname As String 
02.
Application.DisplayAlerts = False 
03.
strSuchname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
04.
For Each ws In Worksheets 
05.
    If Left(ws.Name, Len(strSuchname)) = strSuchname Then 
06.
        ws.Delete 
07.
    End If 
08.
Next 
09.
Application.DisplayAlerts = True
Grüße Uwe

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

01.
'Alte Tabellenblätter löschen 
02.
 
03.
Dim ws As Worksheet, strSuchname As String 
04.
Application.DisplayAlerts = False 
05.
strSuchname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
06.
For Each ws In Worksheets 
07.
    If Left(ws.Name, Len(strSuchname)) = strSuchname Then 
08.
        ws.Delete 
09.
    End If 
10.
Next 
11.
Application.DisplayAlerts = True 
12.
 
13.
 
14.
'Neues Tabellenblatt erzeugen (DiagrammNNZ - <Auswahl von Kombobox>) 
15.
 
16.
 
17.
        Dim strDiagrammanme  ' Names des Diagrammblattes 
18.
        strDiagrammname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
19.
        ActiveSheet.Shapes.AddChart.Select 
20.
        ActiveChart.ChartType = xlColumnClustered 
21.
        ActiveChart.Location xlLocationAsNewSheet, "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
22.
        With ActiveChart 
23.
            .SeriesCollection.NewSeries 
24.
            .SetSourceData Source:=Tabelle4.Range(Tabelle4.Cells(i, j), Tabelle4.Cells(i, 5)) ' Range auf horizontal ändern 
25.
            .SeriesCollection(1).XValues = Tabelle4.Range(Tabelle4.Cells(k, l), Tabelle4.Cells(k, 5)) 
26.
        End With 
27.
        With ActiveChart.Axes(xlValue) 
28.
            .MinimumScale = 0 
29.
            .MaximumScale = ymax 
30.
        End With
Bitte warten ..
Mitglied: colinardo
15.12.2014, aktualisiert um 13:49 Uhr
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 das hast du vergessen...
Bitte warten ..
Mitglied: Anna2701
15.12.2014 um 13:52 Uhr
Der Fehler entsteht nur, wenn das Tabellenblatt existiert. Lösche ich das Tabellenblatt manuell, funktioniert es.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 15.12.2014, aktualisiert 17.12.2014
Zitat von Anna2701:
Der Fehler entsteht nur, wenn das Tabellenblatt existiert. Lösche ich das Tabellenblatt manuell, funktioniert es.
Das kommt weil Ihr immer nur den Code des Makrorekorders blind kopiert, ohne den Code zu verstehen
01.
'Alte Tabellenblätter löschen 
02.
    Dim ws As Worksheet, strSuchname As String 
03.
    Application.DisplayAlerts = False 
04.
    strSuchname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
05.
    For Each ws In Worksheets 
06.
        If Left(ws.Name, Len(strSuchname)) = strSuchname Then 
07.
            ws.Delete 
08.
        End If 
09.
    Next 
10.
    Application.DisplayAlerts = True 
11.
 
12.
'Neues Tabellenblatt erzeugen (DiagrammNNZ - <Auswahl von Kombobox>) 
13.
 
14.
    Dim strDiagrammanme  ' Names des Diagrammblattes 
15.
    Dim chartNew As Chart 
16.
    strDiagrammname = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
17.
     
18.
    Set chartNew = Application.Charts.Add 
19.
    With chartNew 
20.
        .ChartType = xlColumnClustered 
21.
        .Name = "DiagrammNNZ_" & Tabelle4.ComboBox1.Text 
22.
        .SeriesCollection.NewSeries 
23.
        .SetSourceData Source:=Tabelle4.Range(Tabelle4.Cells(i, j), Tabelle4.Cells(i, 5)) ' Range auf horizontal ändern 
24.
        .SeriesCollection(1).XValues = Tabelle4.Range(Tabelle4.Cells(k, l), Tabelle4.Cells(k, 5)) 
25.
    End With 
26.
    With chartNew.Axes(xlValue) 
27.
        .MinimumScale = 0 
28.
        .MaximumScale = ymax 
29.
    End With
Bitte warten ..
Mitglied: Anna2701
15.12.2014 um 14:34 Uhr
Da hast du leider recht!
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.
Bitte warten ..
Mitglied: colinardo
15.12.2014, aktualisiert um 14:38 Uhr
Zitat von Anna2701:

Da hast du leider recht!
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.
Bitte warten ..
Mitglied: Anna2701
17.12.2014 um 10:04 Uhr
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.

01.
DiagrName = "DiagrammNutzungsNebenzeit" 
02.
 
03.
i = 40 
04.
j = 1 
05.
k = 38 
06.
l = 2 
07.
 
08.
Cells(13, 1).Select 
09.
ActiveSheet.Shapes.AddChart.Select 
10.
ActiveChart.ChartType = xlColumnClustered 
11.
ActiveChart.Location xlLocationAsNewSheet, "DiagrammNutzungsNebenzeit" 
12.
ActiveChart.SetSourceData Source:=Range(Tabelle4.Cells(i, j), Tabelle4.Cells(i, 5)) 
13.
ActiveChart.SeriesCollection(1).XValues = Tabelle4.Range(Tabelle4.Cells(k, l), Tabelle4.Cells(k, 5)) 
14.
 
15.
 
16.
ActiveChart.CopyPicture (xlScreen) 
17.
Sheets("DiagrammNutzungsNebenzeit").Paste
Kann ich mit dem Code arbeiten oder muss ich den komplett neu schreiben?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 17.12.2014, aktualisiert um 10:49 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Microsoft Office
gelöst Excel-Formel oder VBA (7)

Frage von nicki01 zum Thema Microsoft Office ...

VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...