Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Hallo zusammen,
darf ich wieder einmal um Eure Hilfe bei einem Problem bitten?
Meine Idee ist in einem Workbook, in dem unterschiedlich viele Tabellen vorkommen können, die Code-Namen nach einem bestimmten Kriterium zu ändern.
Bedeutet, ich benenne die Tabellen mit unterschiedlichen Register-Namen und sortiere diese aufsteigend nach den Register-Namen entsprechend in dem Workbook.
Die Code-Namen können somit völlig durcheinander in der Reihenfolge sein, weil auch immer wieder Tabellen gelöscht und neue Tabellen hinzukommen können.
Jetzt die konkrete Frage, ist es möglich per vba die Code-Namen der Tabellen in der Reihenfolge wie sie eingeordnet/sortiert sind aufsteigend umzubenennen?
Also nach Registername TabelleA, TabelleB, TabelleC...den Codenamen dann Tabelle1, Tabelle2, Tabelle3 usw......
Vielleicht könnt Ihr mir da weiterhelfen!?
Registriert seit: 26.07.2017
Version(en): 365
Hi,
ja, das sollte funktionieren.
Probiere mal folgende Eigenschaften aus:
- ActiveSheet.Name
- ActiveSheet.CodeName
- ActiveSheet.Index
Herzliche Grüße aus dem Rheinland
Jörg
[Windows 10, Microsoft 365]
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
19.04.2020, 05:51
(Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2020, 05:55 von RPP63.)
(18.04.2020, 18:34)sharky51 schrieb: Jetzt die konkrete Frage, ist es möglich per vba die Code-Namen der Tabellen in der Reihenfolge wie sie eingeordnet/sortiert sind aufsteigend umzubenennen?
Moin!
Ja das ist möglich!
Ich frage mich allerdings, was der tiefere Sinn dahinter ist.
Geht es Dir um die Übersicht im Projekt-Explorer?
Heißt, Auflistung nach sortiertem .Name?
Anyway:
Der .Index eines Worksheets beginnt immer "links" mit 1
Dies mache ich mir zunutze, um den .CodeName zu ändern.
Damit das Makro nicht in einen Fehler läuft beginnt meine Aufzählung zunächst mit "Tabelle1001"
(die 1000 wird später wieder zurück subtrahiert)
Sub CN_an_Index_anpassen()
' Eventuell "Zugriff auf das VBA-Projektmodell vertrauen"
' im Trustcenter aktivieren
Dim i%
For i = 1 To Worksheets.Count
With Worksheets(i)
.Parent.VBProject.VBComponents(.CodeName).Properties(5) = _
"Tabelle" & CStr(1000 + i)
End With
Next
For i = 1 To Worksheets.Count
With Worksheets(i)
.Parent.VBProject.VBComponents(.CodeName).Properties(5) = _
"Tabelle" & CStr(i)
End With
Next
End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
19.04.2020, 06:34
(Dieser Beitrag wurde zuletzt bearbeitet: 19.04.2020, 06:34 von RPP63.)
Macht natürlich Sinn, auch das Sortieren der Blätter nach Alphabet gleich zu integrieren:
Sub Name_und_Codename_sortieren()
' Eventuell "Zugriff auf das VBA-Projektmodell Vertrauen"
' im Trustcenter aktivieren
Dim i%, k%
' zunächst nach .Name alphabetisch sortieren
For i = 1 To Worksheets.Count
For k = i To Worksheets.Count
If Worksheets(k).Name < Worksheets(i).Name Then
Worksheets(k).Move Before:=Worksheets(i)
End If
Next
Next
' temporär CodeName ab 1001 beginnend
For i = 1 To Worksheets.Count
With Worksheets(i)
.Parent.VBProject.VBComponents(.CodeName).Properties(5) = _
"Tabelle" & CStr(1000 + i)
End With
Next
' finaler .CodeName
For i = 1 To Worksheets.Count
With Worksheets(i)
.Parent.VBProject.VBComponents(.CodeName).Properties(5) = _
"Tabelle" & CStr(i)
End With
Next
End Sub
… und ich weiß bereits jetzt, dass die Folgefrage ist, was man macht, wenn es mehr als 9 Blätter gibt.
Aber da erwarte ich zunächst ein wenig Eigeninitiative von Sharky!
:21:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Schönen guten morgen Ralf,
zunächst ein großes und fettes Dankeschön!!!
Der vba-Code von Dir funktioniert wie immer bestens, auch bei mehr als neun Tabellenblättern!
Echt super!!!!
Ich habe mir erlaubt noch ein Modul hinzuzufügen, das mir bestimmte Blätter nach der Neubenennung und aufsteigenden Sortierung
noch an eine gewünschte Positionen verschiebt.
Code:
Sub Blaetter_Anordnen()
Dim wksBlatt As Worksheet
Dim x As Integer
Dim Y As Integer
Dim anzSheets
Set wksBlatt = ActiveSheet
anzSheets = ActiveWorkbook.Worksheets.Count
For x = 1 To anzSheets
For Y = x To ActiveWorkbook.Worksheets.Count
If Worksheets(Y).Name < Worksheets(x).Name Then
Worksheets(Y).Move Before:=Worksheets(x)
End If
Next Y
Next x
wksBlatt.Activate
Set wksBlatt = Nothing
'Ausgewählte Blätter verschieben
Sheets("Contents").Move Before:=Sheets(1)
Sheets("Sonstiges").Move after:=Sheets(Sheets.Count)
Sheets("Zusammenfassung").Move after:=Sheets(Sheets.Count)
Sheets("Konfiguration").Move after:=Sheets(Sheets.Count)
Sheets("SaveHistory").Move after:=Sheets(Sheets.Count)
End Sub
Vielen Dank nochmals für Deine Hilfe!
Btw: Welches Tool verwendest Du um den Source-Code mit den Schlüsselwörten farblich so darzustellen?
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Schönen guten morgen Ralf,
zunächst ein großes und fettes Dankeschön!!!
Der vba-Code von Dir funktioniert wie immer bestens, auch bei mehr als neun Tabellenblättern!
Echt super!!!!
Ich habe mir erlaubt noch ein Modul hinzuzufügen, das mir bestimmte Blätter nach der Neubenennung und aufsteigenden Sortierung
noch an eine gewünschte Positionen verschiebt.
Code:
Sub Blaetter_Anordnen()
Dim wksBlatt As Worksheet
Dim x As Integer
Dim Y As Integer
Dim anzSheets
Set wksBlatt = ActiveSheet
anzSheets = ActiveWorkbook.Worksheets.Count
For x = 1 To anzSheets
For Y = x To ActiveWorkbook.Worksheets.Count
If Worksheets(Y).Name < Worksheets(x).Name Then
Worksheets(Y).Move Before:=Worksheets(x)
End If
Next Y
Next x
wksBlatt.Activate
Set wksBlatt = Nothing
'Ausgewählte Blätter verschieben
Sheets("Contents").Move Before:=Sheets(1)
Sheets("Sonstiges").Move after:=Sheets(Sheets.Count)
Sheets("Zusammenfassung").Move after:=Sheets(Sheets.Count)
Sheets("Konfiguration").Move after:=Sheets(Sheets.Count)
Sheets("SaveHistory").Move after:=Sheets(Sheets.Count)
End Sub
Vielen Dank nochmals für Deine Hilfe!
Btw: Welches Tool verwendest Du um den Source-Code mit den Schlüsselwörten farblich so darzustellen?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• sharky51
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Ich hatte den Thread gar nicht mehr auf dem Schirm …
(19.04.2020, 10:03)sharky51 schrieb: Der vba-Code von Dir funktioniert wie immer bestens, auch bei mehr als neun Tabellenblättern!
Nun, bei mehr als 9 Blättern zerreißt es Dir die Sortierreihenfolge im Projektexplorer.
Wenn Dich das nicht stört, ist es ja gut; ich würde das aber anders lösen.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
21.04.2020, 12:35
(Dieser Beitrag wurde zuletzt bearbeitet: 21.04.2020, 12:37 von sharky51.)
Danke, werde mir das heute Abend mal ansehen.
Hallo Ralf,
danke für die Rückmeldung!
Und wie würdest DU das lösen?
Bin immer für bessere Lösungen dankbar!
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Ich würde eine führende Null nehmen:
' finaler .CodeName
For i = 1 To Worksheets.Count
With Worksheets(i)
.Parent.VBProject.VBComponents(.CodeName).Properties(5) = _
"Tabelle" & Format(i, "00")
End With
Next
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51