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, 10:25 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2019, 14:30 von Rabe.)
Hi,
(15.10.2018, 19: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.