Makro für Tabellenname

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Hallo miteinander,

    Mit folgendem Makro erstelle ich in einem exel file Tabellen


    Visual Basic-Quellcode

    1. Dim Zelle, Bereich As Range
    2. Dim i As Integer
    3. Dim nWS As Worksheet
    4. Dim Bool As Boolean
    5. Set Bereich = Range("J2:J" & Range("A65536").End(xlUp).Row)
    6. For Each Zelle In Bereich
    7. For i = 2 To Worksheets.Count
    8. If Worksheets(i).Name = Zelle.Value Then
    9. Bool = True
    10. Exit For
    11. Else
    12. Bool = False
    13. End If
    14. Next i
    15. If Bool = False Then
    16. Set nWS = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    17. nWS.Name = Zelle.Value
    18. End If
    19. Next Zelle


    Dies Funktioniert herforragend. jedoch nur so lange bis ein Zelleninhalt über 30 Buchstaben enthält.
    Wie Kann ich dieses Makro ändern damit es automatisch nur die ersten 30 buchstaben der zelle in den tabellenname einfügt?


    gruss



    Edit by LaMa5:
    - VB-Tag eingefügt (und Code formatiert), das nächste Mal bitte selbst dran denken

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    Hi,

    schau Dir mal die Funktion "Left()" an!


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Danke für den Tipp, hat mri schon weiter geholfen.

    jedoch kommt jetzt ein anderer Fehler :s...


    Kann einem Blatt nicht den gleichen Namen geben wie einem anderen Blatt,....

    Ich finde keine dublikate des namens
    Hi,

    kürze den Namen auf 26 Zeichen und füge hinten einen Unterstrich, gefolgt von der ID des Sheets an. Ist die schnellste Lösung.

    Alternativ kannst Du auch alle Sheets abprüfen, ob der zu vergebene Name noch frei ist und dann entweder abbrechen oder Dir eine Umbenennungslogik ausdenken (zB addiere auf die letzte Stelle eins drauf (3 wird zu 4; D wird zu E; Z wird zu 0).


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Es ist eine bewährte Methode, neue Worksheets nicht leer zu erstellen, sondern als Abbild eines Muster-Worksheets (Template).

    Nachfolgende Funktion kann beides.
    Wenn du kein Template spezifizierst, wird ein leeres Sheet erzeugt, ansonsten eine neue Kopie des Musters.

    Visual Basic-Quellcode

    1. Function CopyWorkSheet(ByVal SheetName As String, Optional ByVal Template As Worksheet) As Worksheet
    2. Dim BaseName As String, i As Integer
    3. If Template Is Nothing Then
    4. Set CopyWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    5. Else
    6. Template.Copy After:=Worksheets(Worksheets.Count)
    7. Set CopyWorkSheet = ActiveSheet
    8. End If
    9. SheetName = Left(SheetName, 30)
    10. BaseName = Left(SheetName, 26)
    11. Do While i < 999
    12. On Error Resume Next
    13. CopyWorkSheet.Name = SheetName 'rename the sheet
    14. If Err.Number = 0 Then Exit Function 'return if rename was ok
    15. i = i + 1
    16. SheetName = BaseName & "_" & Format(i, "000")
    17. Loop
    18. End Function
    19. Sub CreateSheets() 'Aufrufbeispiel
    20. Set ws = CopyWorkSheet("Test") 'create new sheet
    21. Set ws = CopyWorkSheet("Test", Sheets("Muster")) 'copy new sheet from a template
    22. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --