wenn Du mir verrätst, wie Du erkennst, welches Blatt zuletzt hinzugefügt wurde, kann ich eventuell helfen
(etwas) Spaß beiseite - ohne das Du eine Liste der Blätter in der entsprechenden Reihenfolge führst, geht das eher nicht. Als Ereignis kannst Du unter DieseArbeitsmappe dieses wählen. Ich habe hier mal nur eine MsgBox, Du müsstest dann irgendwo den Namen in eine Liste eintragen.
Code:
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox Sh.Name End Sub
Damit die Liste auch bei gelöschten Blättern verwendbar ist, müsstest Du dann noch dieses Ereignis nutzen und die Liste bereinigen:
Code:
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object) MsgBox Sh.Name End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
danke für deine Antwort. Ich entschuldige mich vorweg erstmal, ich habe mich falsch ausgedrückt. Es fehlt nämlich noch ein entscheidener Teil im Code. Ich füge das neue Tabellenblatt über einen Button ein und gebe diesem Tabellenblatt, über eine Textbox, seinen Namen. Der komplette Code, sieht dann eigentlich so aus:
Code:
Sub BlattKopieren() Dim eingabe As String Dim i As Integer eingabe = InputBox("Bitte gebe den neuen Namen des Blattes ein:", "Blatt hinzufügen", "1-999")
If eingabe = "" Then MsgBox "Geben Sie einen Namen an!" Else i = Sheets.Count Worksheets("Vorlage").Visible = xlSheetVisible Worksheets("Vorlage").Copy After:=Sheets(i) ActiveSheet.Name = eingabe Worksheets("Vorlage").Visible = xlSheetsVeryHidden End If Call TabellenUmbenennen End Sub Sub BlattLöschen() ActiveSheet.Delete End Sub Sub TabellenUmbenennen() Dim Sht As String anzahl = ThisWorkbook.Sheets.Count 'Numerische Tabellen auf dreistellig umbenennen For t = 2 To anzahl Sht = ThisWorkbook.Sheets(t).Name If IsNumeric(Sht) Then If IsNumeric(Sht) And Len(Sht) < 3 Then ThisWorkbook.Sheets(t).Name = Format(Sht, "00#") End If Next t Call Sortieren End Sub Sub Sortieren() 'Verweis auf 'Microsoft Windows Common Controls 6,0 (SP6) 'Ggf. Userform einfuegen, weitere Steuerelemente, Listview - 'dann ist der Verweis vorhanden, das userform kann wieder 'geloescht werden 'Variablendeklarationen Dim lvBlaetter As ListView Dim blaetter As Worksheet Dim arrBlaetter, iCnt% Set lvBlaetter = New ListView 'Schleife ueber alle Tabellenblaetter For Each blaetter In Worksheets 'wenn der Name numwerisch ist, dann dem ListView hinzufuegen If IsNumeric(blaetter.Name) Then lvBlaetter.ListItems.Add Text:=blaetter.Name 'Schleife ueber alle Tabellenblaetter Next 'ListView sortieren lvBlaetter.SortKey = 0 lvBlaetter.SortOrder = lvwAscending lvBlaetter.Sorted = True 'Letztes Blatt ans Ende setzen, wenn es nicht schon dort ist If Sheets(Sheets.Count).Name <> Sheets(CStr(lvBlaetter.ListItems(lvBlaetter.ListItems.Count))).Name Then Sheets(CStr(lvBlaetter.ListItems(lvBlaetter.ListItems.Count))).Move After:=Sheets(Sheets.Count) 'Ende Letztes Blatt ans Ende setzen, wenn es nicht schon dort ist End If 'Schleife ueber alle anderen Blaetter For iCnt = lvBlaetter.ListItems.Count - 1 To 1 Step -1 'Blatt vor das naechste setzen Sheets(CStr(lvBlaetter.ListItems(iCnt))).Move before:=Sheets(CStr(lvBlaetter.ListItems(iCnt + 1))) 'Ende Schleife ?ber alle anderen Blaetter Next Sheets(CStr(lvBlaetter.ListItems(lvBlaetter.ListItems.Count))).Activate End Sub Sub ScrollTo() Dim Adresse As String 'Gehe zu Adresse Application.Goto Reference:=Range("C9"), scroll:=False End Sub
Ist es mit dieser neuen Erkenntnis irgendwie möglich dem neuen Blatt vielleicht eine Variabele zu zuteilen, sodass später wieder erkannt werden kann, welches Blatt zuletzt eingefügt wurde und es so direkt wieder aufgerufen werden kann? Ich hoffe du verstehst, was ich meine. Ansonsten kann ich es dir auch nochmal ein bisschen ausführlicher erklären.
im Prinzip ist eine Liste eine aus meiner Sicht gute Lösung.
Oder Du änderst den Codenamen vom Blatt: ThisWorkbook.VBProject.VBComponents("Tabelle1").Name = "LetzteTabelle" Du must dann nur den Codename dieser bei der nächsten letzten Tabelle dann vorletzten Tabelle anpassen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
ich danke dir für deine Antwort, allerdings verstehe ich das leider nicht. Ich wäre dir sehr dankbar, wenn du dich nochmal ein bischen genauer ausdrücken könntest. Was meinst du z.B. mit einer Liste?
na, Du legst irgendwo eine Liste der Blätter an. Wenn Du eins hinzufügst, trägst Du das auch in diese Liste ein - konkret Du schreibst es am Ende der Liste unter die bereits vorhandenen Einträge. Wenn Du ein Blatt löschst, löschst Du auch den zugehörigen Eintrag in der Liste. Entsprechend sollte der letzte Eintrag in der Liste bezogen auf die vorhandenen Blätter immer das zuletzt hinzugefügte Blatt sein.
Das musst Du aber nicht manuell selber machen, das kann auch ein Makro übernehmen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
achso okay gut und wie würde so ein Makro ungefähr aussehen?
Mir ist in der praktischen benutzung der Tabelle auch noch etwas aufgefallen, und zwar dauert die sortierung der Tabellenblätter mit jedem Tabellenblatt länger. Ich habe die Tabelle jetzt mal hochgeladen, damit du besser siehst was ich meine. Ich hoffe du hast eine Idee wo das her kommen könnte und wie man es am besten beheben kann. Ich bedanke mich für deine Hilfe!
hier erst mal das Hinzufügen. Zum Umbenennen würde ich nicht extra ein Makro bemühen Ich hab dann mal noch With … reingebracht, sind ein paar Zeichen weniger
Code:
Sub BlattKopieren() Dim eingabe As String Dim i As Integer eingabe = InputBox("Bitte gebe den neuen Namen des Blattes ein:", "Blatt hinzuf?gen", "1-100") If eingabe = "" Then MsgBox "Geben Sie einen Namen an!" Else If IsNumeric(eingabe) Then eingabe = Format(eingabe, "00#") i = Sheets.Count With Worksheets("Vorlage") .Visible = xlSheetVisible .Copy After:=Sheets(i) ActiveSheet.Name = eingabe .Visible = xlSheetsVeryHidden End With End If Sheets("Blattliste").Cells(Rows.Count, 1).End(xlUp).Offset(1) = eingabe ' Call TabellenUmbenennen End Sub
Das Löschen würde ich übrigens nicht so programmieren:
Sub BlattL?schen() ActiveSheet.Delete End Sub
Das würde ja dann das Blatt löschen, auf dem der Button liegt. Oder ist das so gewollt?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
09.01.2019, 11:25 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2019, 15:30 von Rabe.)
Hi,
(15.10.2018, 20:18)Gast 123 schrieb: ich habe noch zwei Codes im Angebot. Sie dürften alle Probleme lösen: Der erste Code listet nur die -sichtbaren Tabellen- im Inhaltsverzeichnis auf. Das ist je als Lösung gewünscht, oder?
mit dem dort vorgeschlagenen Code:
Sub InhaltsverzeichnisErstellen() Dim Sht AsString Dim Anzahl AsLong Dim t AsLong
For t = 2To Anzahl If ThisWorkbook.Sheets(t).Visible = TrueThen With ThisWorkbook.Sheets("Inhaltsverzeichnis") .Hyperlinks.Add Anchor:=.Cells(t, 2), Address:="", SubAddress:=ThisWorkbook.Sheets(t).Name ' & " Zum Gerät" EndWith EndIf Next t
EndSub
kommt beim Klick auf den Verzeichnis-Eintrag die Fehlermeldung "Der Bezug ist ungültig!" und es wird mir in den Hyperlinks statt der tatsächlich anzuspringenden Tabelle immer nur das Inhaltsverzeichnis verlinkt.