Microsoft Excel

Herbers Excel/VBA-Archiv

Hinzufügen von Tabellenblättern

Betrifft: Hinzufügen von Tabellenblättern von: Günter
Geschrieben am: 03.11.2014 10:49:53

Hallo zusammen,

ich habe ein kleines Problem mit Hinzufügen von Tabellenblättern (siehe Datei):

https://www.herber.de/bbs/user/93499.xlsm

Es sollen Tabellenblätter mit Namen aus dem Feld "bereich" eingefügt werden.
Wenn ein Tabellenblatt gleichen Namens (hier 105) bereits vorhanden ist, soll kein Blatt hinzugefügt werden.
Mit meinem Programmcode wird in diesem Fall ein Blatt "Tabelle123" angelegt, was auch logisch ist, da der Befehl "worksheets.add" zuerst ausgeführt wird.

*************************************

Sub tab_anlegen()
Dim zelle As Range

Sheets("Tabelle1").Activate

For Each zelle In Selection
On Error Resume Next
Worksheets.Add
ActiveSheet.Name = zelle.Value
Next zelle
End Sub

**************************************

Vielen Dank im Voraus
Viele Grüße
Günter

  

Betrifft: Name als Param nach Add angeben! Gruß owT von: Luc:-?
Geschrieben am: 03.11.2014 10:53:32

:-?


  

Betrifft: AW: Hinzufügen von Tabellenblättern von: Günter
Geschrieben am: 03.11.2014 12:10:35

Danke für die schnelle Antwort...
...funktioniert nicht wirklich oder ich bin zu dusselig...
**********************************

Sub tab_anlegen()
Dim zelle As Range

Sheets("Tabelle1").Activate

For Each zelle In Selection
On Error Resume Next
Worksheets.Add.Name = zelle.Value
Next zelle
End Sub

**********************************
Für den doppelten Eintrag wird immer noch ein zusätzliches leeres Blatt eingefügt,
was bei einer großen Anzahl von Duplikaten stört.
Ich brauche etwas ähnliches wie ein "select distinct" :-)

Gruß
Günter


  

Betrifft: Lies nach! Worksheets.Add zelle.Value -- orT von: Luc:-?
Geschrieben am: 03.11.2014 12:18:45

Gruß, Luc :-?


  

Betrifft: AW: Lies nach! Worksheets.Add zelle.Value -- orT von: Daniel
Geschrieben am: 03.11.2014 12:33:31

Hi

was Luc vorgeschlagen hat hilft nicht.
du kannst bei Worksheets.Add nicht den Namen des einzufügenden Blattes als Parameter vorgeben.
über die Parameter dieser Funktion kannst du folgedes steuern:
a) an welcher Stelle das Blatt eingefügt werden soll (after/before)
b) wieviele Blätter du einfügen willst (Count)
c) was für ein Blatt (Tabelle, Chart) du einfügen willst (Type)
den Namen kannst du nicht vorgeben, dieser wird von Excel beim Erstellen automatsich vergeben und du musst ihn nachträglich ändern.

Gruß Daniel


  

Betrifft: Ja, da habe ich das falsch erinnert, ... von: Luc:-?
Geschrieben am: 03.11.2014 17:36:33

…Günther,
aber beim empfohlenen Nachlesen wär's wohl klar geworden… ;-)
Abgesehen mal von Daniels umfassenderer GesamtRegie für dein Problem, kann man so etwas auch wie folgt machen:
Dim wSh As Worksheet
Set wSh = ActiveWorkbook.Worksheets.Add: wSh.Name = "gewünschterName"

Gruß, Luc :-?


  

Betrifft: AW: Ja, da habe ich das falsch erinnert, ... von: Daniel
Geschrieben am: 03.11.2014 17:45:24

Kann man so machen, aber was bringts?
Es wird eine zusätzliche Variable benötigt und das Problem ist nicht gelöst.
Gruß Daniel


  

Betrifft: ...zB saubere Referenzierung! Fremdwort? ;-] owT von: Luc:-?
Geschrieben am: 03.11.2014 18:37:30

:-?


  

Betrifft: AW: Lösung des Problems! Unwichtig? von: Daniel
Geschrieben am: 03.11.2014 19:17:11

Direkt nach dem Einfügen eines Blattes ist das neue Blatt immer das aktive Sheet.
Von daher ist in diesem Fall und zu diesem Zeitpunkt ActiveSheet meiner Ansicht nach schon eine saubere Referenzierung.
Ausserdem, was nützt eine saubere Referenzierung, wenn die Aufgabe nicht gelöst wurde?


  

Betrifft: Darum ging's hier doch jetzt gar nicht, ... von: Luc:-?
Geschrieben am: 03.11.2014 20:32:25

…aber du willst wohl wieder mal das letzte Wort behalten. Mit dir zu diskutieren macht weder Spaß noch bringt es irgendeinen Nutzen… :-[
Im Übrigen, setzt doch mal einen Pkt hinter ActiveSheet — was zeigt dir dann der VBE-Intellisense an, na…?
Die VBE-Hilfe-Bspp von MS zeichnen sich idR auch durch viele, deiner Meinung nach überflüssige Objekt­Variablen aus → warum wohl…?
Luc :-?


  

Betrifft: AW:nein, es ging darum.. von: Daniel
Geschrieben am: 03.11.2014 20:44:11

dass Günther beim Erstellen der Blätter vermeiden wollte, das für Zellen, für schon ein Blatt besteht nochmal eines erstellt hat.
Das hat dich bisher ja nicht wirklich interessiert.


  

Betrifft: Habe ich auch nicht behauptet, aber ... von: Luc:-?
Geschrieben am: 04.11.2014 03:44:17

…wahrscheinlich hast du ja eines von diesen Dingern, bei denen man nur hört, was man hören will, und offensichtlich auch nur sieht, was man sehen will… :->>
Luc :-?


  

Betrifft: AW: Hinzufügen von Tabellenblättern von: Daniel
Geschrieben am: 03.11.2014 12:21:15

Hi

dann solltest du vor dem Einfügen eines neuen Blattes prüfen, ob ein Blatt mit diesem Namen schon vorhanden ist.
Das geht am einfachsten, in dem man im "On Error Resume Next"-Zustand versucht das Blatt mit dem entsprechenden Namen einer Variablen zuzuweisen.
Wenn diese Aktion ohne Fehler gelingt, ist das Blatt bereits vorhanden, wenn ein Fehler entsteht, fehlt das Blatt und muss angelegt werden.

Desweitern musst du bei numerischen Blattnamen darauf auchten, dass du sauber zwischen Blattname (ist immer ein Text) und der Indexnummer des Blattes unterscheidest.
Sheets(105) ist das 105. Blatt, Sheets("105") ist das Blatt mit dem Namen "105" auf dem Reiter.

der Code dazu sieht so aus:

Sub tab_anlegen()
Dim zelle As Range
Dim ws As Worksheet
Sheets("Tabelle1").Activate

On Error Resume Next
For Each zelle In Selection
    Err = 0
    Set ws = Worksheets(CStr(zelle.Value))
    If Err <> 0 Then
        Worksheets.Add
        ActiveSheet.Name = zelle.Value
    End If
Next zelle

On Error GoTo 0
End Sub



  

Betrifft: AW: Hinzufügen von Tabellenblättern von: Günter
Geschrieben am: 03.11.2014 14:43:14

das funzt,
vielen Dank für die schnelle Hilfe
Gruß
Günter


 

Beiträge aus den Excel-Beispielen zum Thema "Hinzufügen von Tabellenblättern"