Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Adresse variabler Seiten auslesen
#21
Hallöchen,

Hier mal zwei Ansätze zum "Sortieren". Variante 1 ist mit einer Collection, Variante 2 mit einem Listview Bei der Collection nehme ich die Blattnamen als Key und Value und kann die Namen über die Key's sortiert ansprechen. Beim Listview gibt es eine "integrierte" Sortierfunktion.

Code:
Sub Var1()
'Variablendeklarationen
Dim colSheets As New Collection, blaetter As Worksheet
Dim arrBlaetter, iCnt%, tmp
'Schleife ueber alle Tabellenblaetter
For Each blaetter In Worksheets
  'wenn der Name numwerisch ist, dann der collection hinzufuegen
  If IsNumeric(blaetter.Name) Then colSheets.Add blaetter.Name, blaetter.Name
'Schleife ueber alle Tabellenblaetter
Next
'Bei Fehler naechstes Kommando
On Error Resume Next
'Schleife ueber eventuelle Blattnamen
For iCnt = 100 To 1 Step -1
  'Variable fuer Blattname zuruecksetzen
  tmp = ""
  'ermitteln, ob Blattname - Key vorhanden ist
  tmp = colSheets.Item(Format(iCnt, "00#"))
  'Wenn Blattname vorhanden ist, dann im Direktfenster Ausgeben
  If tmp <> "" Then Debug.Print tmp
'Ende Schleife ueber eventuelle Blattnamen
Next
End Sub


Code:
Sub Var2()
'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
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 = lvBlaetterwAscending
lvBlaetter.Sorted = True
'Erstes Element ausgeben
MsgBox lvBlaetter.ListItems(1)
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#22
Hallo André,

ich habe beide Codes ausprobiert und leider funktioniert keiner der beiden. Bei dem ersten passiert garnicht und bei dem zweiten erscheint folgende Fehlermeldung: ,,Benutzerdefinierter Typ nicht definiert."

Ich habe mich mal ein bisschen mit dem Thema befasst und bin darauf gestoßen, dass dies an meiner 64-Bit Version von Office liegen könnte. Kann es das sein und wenn ja, gibt es noch eine andere Möglichkeit das ganze zu realisieren?

Gruß Lukas
Antworten Top
#23
Hallo Lukas,

hast Du eventuell in den codes die Kommentare nicht gelesen?

Beim ersten Code steht dass die Blattnamen im Direktfenster ausgegeben werden. Das ist erst mal zur Kontrolle. Da fehlt dann der Part mit dem Sortieren. Den wolltest Du ja mit dem Quicksort erledigen oder habe ich da Deinen Beitrag falsch verstanden? Auf Grund deines Vorschlags hatte ich gedacht, dass Du mit Deinen VBA-Kenntnissen etwas tief stapelst und doch das eine oder andere weist.

Beim zweiten Code musst Du einen Verweis setzen. Wenn das nicht geht, steht auch drin, wie Du dazu kommst. In einer Meldung wird Dir dann der erste Eintrag als Meldung ausgegeben. Das ist nur ein Beispiel, wie Du überhaupt an die Einträge vom Listview herankommst. Wenn Du die dann in einer Schleife "von hinten aufrollst", kannst Du die Blätter wie in meiner vorherigen Antwort "sortieren".
Aber wahrscheinlich sollte ich da etwas komplettes liefern?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#24
Hallo,

danke für deine Antwort.

Ich muss dir ehrlich gestehen das ich mich nicht so gut in dem ganzen Thema VBA auskenne. Über die Quicksort Funktion bin ich auf einer anderen Website gestolpert und dachte, dass es vielleicht damit funktioniert. Aber wie genau weiß ich leider nicht.

Ich kann verstehen wenn du keine Lust hast mir alles zu ,,erarbeiten", aber denn noch bitte ich dich darum. Anstonsten weiß ich nicht, wie ich weiter vorgehen soll.

Gruß Lukas
Antworten Top
#25
Hallo Lukas,

wenn ich keine Lust hätte wäre ich wohl nicht in einem Forum Smile Ist nur nicht immer leicht, das Wissen eines Fragestellers einzuschätzen. Anbei habe ich nun die beiden Varianten. Du kannst die Blätter "mischen" und auch weitere hinzufügen. Auf dem Blatt Tabelle2 habe ich zwei Buttons, für die beiden Varianten.


Angehängte Dateien
.xlsm   BlattnamenSortierenLukas.xlsm (Größe: 28,77 KB / Downloads: 4)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#26
Hallo André,

vielen Dank das du mir trotzdessen, dass ich nicht so viel Ahnung habe, weiterhilfst. Das ist wirklich nicht Selbstverständlich!
Und das stimmt, dass es schwer ist das Wissen andere Benutzer einzuschätzen. Beim nächten mal sage ich von Anfang an, dass ich keine großen Kentnisse habe :32: 

Ich habe mir beide Varianten einmal angeschaut und in deiner Tabelle funktionieren diese auch. In meiner Tabelle funktioniert jedoch nur die erste Variante, also die mit der Collection Funktion. Bei der ListView Variante, wird der Fehler ,,Benutzerdefinierter Typ nicht vorhanden", an der Stelle ,,Dim lvBlaetter As Listview", ausgegeben. Weißt du woran dies liegen könnte?

Außerdem habe ich noch die Frage ob es möglich ist, dass ich nach dem Kopiervorgang auf das neu erstelle Blatt zurückspringen kann?
Das ist der aktuelle Code:

Code:
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
End Sub


Über eine Antwort freue ich mich wie immer sehr!

MfG Lukas
Antworten Top
#27
Hallöchen,

das mit dem Listview steht, wie gesagt, im Kommentar des Codes.

Einen Verweis setzt man im Menü | Extras | Verweise und muss drt in der Liste suchen. Oder eben, wie auch beschrieben, mit dem Umweg über's Einfügen eines UF und dort ein ListViews auswählen. Dazu muss man im "Werkzeugdialog" "weitere Steuerelemente hinzufügen"

Weiteres dann morgen, ich mach jetzt Feierabend, muss 4:40 Uhr raus ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#28
Guten Abend,

danke, ich habe es nun hinbekommen. Der Verweis zum Listview hat mir noch gefehlt :16:
Ich habe den Verweis jetzt über die weiteren Steuerelemente hinzugefügt. Gilt der Verweis von dem ListView dabei nur für meinen PC oder für die Datei? Ich möchte nämlich, dass die Excel Tabelle auch auf anderen Rechnern problemlos läuft.

Ich habe mich jetzt auch für die ListView Variante entschieden, da diese doch bei vielen Tabellenblättern merkbar schneller läuft.

Und dann bleibt noch die Frage von gestern offen. Ob es möglich ist, sich das zuletzt hinzugefügte Tabellenblatt, anzeigen zu lassen?

Ich hoffe deine Nacht war nicht all zu kurz, 4:40 Uhr ist wirklich früh :/

Gruß Lukas
Antworten Top
#29
Hallöchen,

der Verweis ist immer Dateibezogen, Du kannstt sie also beruhiigt weitergeben.
Wenn das Blatt mit der höchsten Zahl auch das zuletzt hinzugefügte ist, dann tust DU es einfach aktiveren. Es ist ja in der Listview - Liste

Im Code setze ich ja das letzte Blatt ans Ende - siehe wieder die Kommentare. Es eht also um dieses Baltt:

Sheets(CStr(lvBlaetter.ListItems(lvBlaetter.ListItems.Count)))


da kommt die Aktivierugn dazu:

Sheets(CStr(lvBlaetter.ListItems(lvBlaetter.ListItems.Count))).Activate

Das kannst DU z.B. als letze Zeile vor End Sub einfügen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#30
Hallo,

danke für deine Erklärung. Das habe ich soweit verstanden, allerdings handelt es sich nicht um das Blatt mit der höchsten Zahl, welches ich angezeigt bekommen will. Sondern um das zuletzt hinzugefügte, quasi dass, was neu einsortiert wird. Gibt es dafür auch eine Möglichkeit?
Der Code sieht noch genauso aus, wie in meinem vorletzten Beitrag.

MfG
Lukas
Antworten Top


Gehe zu:


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