Adresse variabler Seiten auslesen
#11
Hallo,

Zitat:Deswegen ist meine Frage ob man nicht auch alle Tabellenblätter, unabhängig wie diese heißen, miteinander vergleichen kann ?

ich würde bei jedem Starten der Datei alle Tabellenblattreiter einlesen lassen.
Somit hätte ich eine aktuelle Übersicht und könnte im zweiten Teil dann wie
folgt verfahren. Und hier gäbe es (siehe die Buttons), sogar schon einen, der
in der Lage ist mal schnell eben die Registernamen neu einzulesen. Folglich
würden mir auch keine neu hinzugekommenen oder nicht mehr vorhandenen
Reiternamen entgehen.

Edit: Ich bin bisher davon ausgegangen, daß Du die Blätter drucken willst.
Du willst sie aber nur vergleichen.
Also paßt mein Vorschlag nicht wirklich, sorry.


Angehängte Dateien Thumbnail(s)
   
Top
#12
Vielen Dank für Eure Antworten!

Um erst nochmal auf die Antwort von Jörg zurückzukommen. Ich habe den Code mal bei B5 eigensetzt, allerdings erscheint dann bei mir eine Null bei den Geräte Nummern, irgendwas muss ich da falsch gemacht haben, weißt du was das ein könnte?
 
Dann zu der Antwort von Käpt´n Blaubär. Auch wenn dein Vorschlag nicht passt, bedanke ich mich trotzdem bei dir. Ich habe ja anfangs schonmal einen VBA Code in einer Nachricht hinterlassen. Ist denn mit dem nichts weiter anzufangen, beziehungsweise kann mir da jemand die Fragen beantworten, die ich dazu gestellt habe? Denn ich denke, die beste Möglichkeit meinen Wunsch zu erfüllen wird es sein, über VBA zu gehen.

Ich freue mich über jede Antwort und bedanke mich auch schonmal bei allen die mir helfen!

Gruß Lukas
Top
#13
(11.10.2018, 14:07)lukas-2000 schrieb: Vielen Dank für Eure Antworten!

Um erst nochmal auf die Antwort von Jörg zurückzukommen. Ich habe den Code mal bei B5 eigensetzt, allerdings erscheint dann bei mir eine Null bei den Geräte Nummern, irgendwas muss ich da falsch gemacht haben, weißt du was das ein könnte?
...
Gruß Lukas

Nö, weiß ich nicht. Weil ich nicht sehe, was du wie eingesetzt hast, Bei mir hat das funktioniert. Allerdings muss man die Datei als *.xlsm oder *.xlsb abspeichern - wegen der Makro4 Formel...
Gruß Jörg
stolzes Mitglied im ----Excel-Verein
Freund einer excellenten Power Query-Abfrage
Top
#14
Okay, dann weiß ich es auch nicht, ich habe nochmal alles nachgeschaut, konnte aber keine konkreten Fehler entdecken. Die Datei ist auch als .xlsm abgespeichert, daran kann es auch nicht liegen.
Nichts gegen dich Jörg, aber ich denke für mich wäre es mit einem VBA Code am besten. Ich bedanke mich trotzdem sehr, für deine Hilfe!
Ich habe mich jetzt nochmal ein bisschen mit dem VBA Code beschäftigt, dieser sieht jetzt so aus:


Code:
Sub Sortieren()
' Sortieren von Arbeitsblättern
Dim i As Integer, j As Integer, k As Integer
k = ActiveWorkbook.Worksheets.Count
For i = 2 To k
For j = i To k
If Worksheets(j).Name < Worksheets(i).Name Then
Worksheets(j).Move Before:=Worksheets(i)
End If
Next j
Next i
' Ende Sortieren von Arbeitsblättern
End Sub

Es geht hierbei nur erstmal um die Sortierung der Tabellenblätter. Am Anfang meiner Arbeitsmappe befindet sich ein Inhaltsverzeichnis, was dank dem Code auch am Anfang stehen bleibt. Allerdings habe ich das Problem, dass die Zahlen nur korrekt sortiert werden, wenn sich davor nullen befinden, also so:
001, 005, 017, 025, 056, 193, 378, …
Kann man den Code auch noch irgendwie so anpassen, dass es auch ohne Nullen funktioniert oder das die Nullen automatisch eingefügt werden, je nach dem ob die Zahl ein- oder zweistellig ist?

Gruß Lukas
Top
#15
Hallo Lukas

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?
Der zweite Code benennt alle numerischen Tabellen in dreistellige Nummern um!!  (durch vorsetzen von "00" oder "0")

Würde mich freuen wenn damit die letzten Proleme gelöst sind.

mfg  Gast 123

Code:
Sub InhaltsverzeichnisErstellen()
Dim Sht As String
  '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, 1), Address:="",
           SubAddress:=ThisWorkbook.Sheets(t).Name & " Zum Gerät"
     End With
  End If
  Next t
 
End Sub



Sub Tabellen_umbenennen()
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 Len(Sht) = 1 Then Sht = "00" & Sht
        If Len(Sht) = 2 Then Sht = "0" & Sht
        ThisWorkbook.Sheets(t).Name = Sht
     End If
  Next t
 
End Sub
Top
#16
Hallo Gast 123,

genauso habe ich mir das vorgestellt. Vielen Dank!

Allerdings ist mir aufgefallen, dass Excel ein bisschen Zeit braucht, die ganzen Befehle auszuführen. Gibt es noch eine Möglichkeit das ganze zu verschnellern? Wenn es nicht funktioniert, ist es aber auch nicht schlimm.

Mein Code sieht jetzt so aus:


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 Len(Sht) = 1 Then Sht = "00" & Sht
       If Len(Sht) = 2 Then Sht = "0" & Sht
       ThisWorkbook.Sheets(t).Name = Sht
    End If
 Next t
   Call Sortieren    
End Sub

Sub Sortieren()
' Sortieren von Arbeitsblättern
   Dim i As Integer, j As Integer, k As Integer
   k = ActiveWorkbook.Worksheets.Count
   For i = 2 To k
   For j = i To k
   If Worksheets(j).Name < Worksheets(i).Name Then
   Worksheets(j).Move Before:=Worksheets(i)
   End If
   Next j
   Next i
   ' Ende Sortieren von Arbeitsblättern
   Call ScrollTo
End Sub

Sub ScrollTo()
  Dim Adresse As String
  'Gehe zu Adresse
  Application.Goto Reference:=Range("C9"), scroll:=False
End Sub

Gruß Lukas
Top
#17
Hallöchen,

das umbenennen könntest Du z.B. so abkürzen:

If IsNumeric(Sht) And Len(Sht) < 3 Then ThisWorkbook.Sheets(t).Name = Format(Sht, "00#")

Falls Du Berechnungen in der Datei hast, könntest Du vor den Aktionen auch den Berechnungsmodus auf manuell stellen und hinterher wieder auf den alten Stand und berechnen.

Beim Verschieben könntest Du so vorgehen, dass Du das Blatt mit der größten Nummer ans Ende stellst und die anderen der Reihe nach davor einfügst.
Falls die "Nummern-Namen" nicht durchgängig sind, erstellst Du Dir zuerst in einem Array eine Liste der belegten Nummern und arbeitest dann diese Liste ab..
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#18
Hallo André,

danke für deine Antwort!


Zitat:If IsNumeric(Sht) And Len(Sht) < 3 Then ThisWorkbook.Sheets(t).Name = Format(Sht, "00#")

Danke, das hat schonmal funktioniert. Es funktioniert sogar äußerst gut. Bei dieser Variante erziele ich schon eine deutliche höhere Geschwindigkeit. Ich glaube das dieser Code, die Geschwindigkeit am meisten beeinflusst hat. Wenn es nicht schneller geht, wäre ich mit der aktuellen Geschwindigkeit, auch schon ganz zufrieden.
 
Das mit dem Berechnugsmodus hört sich schonmal garnicht schlecht an. Wie würde man so etwas denn per VBA realisieren, ich kenne mich dahingehend nicht so gut aus?
 
Die ,,Nummer-Namen" sind nicht durchgängig, also werden variabel eingetragen. Wie meinst du das genau mit dem Array, was meinst du mit dieser Liste? Ich verstehe das nicht so ganz...
 
Gruß Lukas
Top
#19
Hallöchen,

hier mal ein Ansatz.
Code:
Sub Makro2()
'Variablendeklarationen
Dim arrSheets, iCnt%
'Berechnung auf manuell
Application.Calculation = xlManual
'Array mit Blattnamen bilden
arrSheets = Array("001", "003", "005")
'Letztes Blatt ans Ende setzen
Sheets("005").Move After:=Sheets(Sheets.Count)
'Schleife ueber alle anderen Blaetter
For iCnt = 1 To 0 Step -1
  'Blatt vor das naechste im Array setzen
  Sheets("001").Move before:=Sheets(arrSheets(iCnt + 1))
'Ende Schleife ?ber alle anderen Blaetter
Next
'Berechnung auf automatisch
Application.Calculation = xlAutomatic
End Sub
Das Array mit den Blattnamen könnte man auch automatisch bilden. Da die Blätter unsortiert sind, müsste man das Array dann noch sortieren.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#20
(26.10.2018, 17:08)schauan schrieb: Hallöchen,

hier mal ein Ansatz.
Code:
Sub Makro2()
'Variablendeklarationen
Dim arrSheets, iCnt%
'Berechnung auf manuell
Application.Calculation = xlManual
'Array mit Blattnamen bilden
arrSheets = Array("001", "003", "005")
'Letztes Blatt ans Ende setzen
Sheets("005").Move After:=Sheets(Sheets.Count)
'Schleife ueber alle anderen Blaetter
For iCnt = 1 To 0 Step -1
 'Blatt vor das naechste im Array setzen
 Sheets("001").Move before:=Sheets(arrSheets(iCnt + 1))
'Ende Schleife ?ber alle anderen Blaetter
Next
'Berechnung auf automatisch
Application.Calculation = xlAutomatic
End Sub
Das Array mit den Blattnamen könnte man auch automatisch bilden. Da die Blätter unsortiert sind, müsste man das Array dann noch sortieren.

Hallo,
ich habe mal ein bisschen mit dem Code herumprobiert und dabei ist mir eine Sache aufgefallen. Wenn ich kein Tabellenblatt mit dem Namen "001", "003" und "005" habe, hat ja quasi das Array keinen bezug mehr und es kommt somit eine Fehlermeldung auf. Das größte Probelm an der Sache ist nur, dass die Blattnamen variabel sind. Das heißt es muss kein Blatt geben was den Namen "001", "002", usw. hat. Gibt es in der Hinsicht noch eine andere Möglichkeit das Array zu bilden, also das es auch mit Variabelen Blattnamen funktioniert?

Die Sortierung könnte man ja dann mit dem QuickSort-Verfahren realisieren.

Gruß Lukas
Top


Gehe zu:


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