Adresse variabler Seiten auslesen
#31
Hallo Lukas,

wenn Du mir verrätst, wie Du erkennst, welches Blatt zuletzt hinzugefügt wurde, kann ich eventuell helfen Smile

(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)
Top
#32
Guten Abend,

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.

Gruß Lukas
Top
#33
Hallo Lukas,

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)
Top
#34
Hallo André,

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?

Gruß Lukas
Top
#35
Hallo Lukas,

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. Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#36
Hallo,

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!

Gruß Lukas


Angehängte Dateien
.xlsm   Prüfungen Veranschaulichung.xlsm (Größe: 49,37 KB / Downloads: 3)
Top
#37
Hallo Lukas,

hier erst mal das Hinzufügen. Zum Umbenennen würde ich nicht extra ein Makro bemühen Smile Ich hab dann mal noch With … reingebracht, sind ein paar Zeichen weniger Smile

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)
Top
#38
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 As String
  Dim Anzahl As Long
  Dim t As Long
 
  'Inhaltsverzeichnis
  Anzahl = ThisWorkbook.Sheets.Count
 
  For t = 2 To Anzahl
     If ThisWorkbook.Sheets(t).Visible = True Then
        With ThisWorkbook.Sheets("Inhaltsverzeichnis")
           .Hyperlinks.Add Anchor:=.Cells(t, 2), Address:="", SubAddress:=ThisWorkbook.Sheets(t).Name  ' & " Zum Gerät"
        End With
     End If
  Next t
 
End Sub
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.

Was mache ich falsch?

   
   

[push]
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste