Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1288to1292
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellennamen auf 31 Zeichen kürzen

Tabellennamen auf 31 Zeichen kürzen
12.12.2012 15:45:43
Jan
Hallo zusammen,
Klaus hatte mir schon super weitergeholfen (kann leider auf den alten Beitrag nicht mehr antworten) mit der Erstellung von neuen Excel-Files bzw. neuen Tabellenblättern (siehe unten). Dabei hat sich das Problem ergeben, dass die Namen teilweise über 31 Zeichen lang sind und daher das Makro abbricht.
Meine Lösung, den Tabellennamen zu kürzen, sah nun so aus, funktioniert aber nicht:
(das sind meine ersten VBA-Gehversuche, daher danke für jeden Tipp)
i = Len(rTables.Value)
rTables.Name = rTables.Value
If i > 31 Then rTables.Name = Left(rTables.Name, 31)
Am Besten wäre es sogar, wenn der Name bis zum ersten auftretenden Leerzeichen weggekürzt wird, maximal aber nach 31 Zeichen. Am ersten Teil (Leerzeichen) verzweifle ich aber völlig.
Sub MakeManyTables(iColNew As Integer)
Dim lRow As Long
Dim lAnzTable As Long
Dim wksOld As Worksheet
Dim i As Range
Set wksOld = ActiveSheet    'Blatt merken
Dim rTables As Range
lRow = Cells(Rows.Count, iColNew).End(xlUp).Row 'letzte Zeile
For Each rTables In Range(Cells(1, iColNew), Cells(lRow, iColNew))
If rTables.Value = "" Then
'nix! wenn leer dann nix!
Else    'aber sonst!
lAnzTable = Application.WorksheetFunction.CountIf(Cells(1, iColNew).EntireColumn, _
rTables.Value)
'so viele Datensätze dieses Names gibt es
Cells(rTables.Row, 1).Resize(lAnzTable, Columns.Count).Copy 'kopieren
Sheets.Add          'neues sheet
i = Len(rTables.Value)
rTables.Name = rTables.Value
If i > 31 Then rTables.Name = Left(rTables.Name, 31)
With ActiveSheet    'das neu erstellte sheet ist automatisch "active"!
.Name = rTables.Value 'sheet umbenennen
.Range("A2").PasteSpecial
.Range("A1").Value = "Überschrift 1"    'Überschriften wirst du brauchen?
.Range("B1").Value = "Überschrift 2"    'ändere sie hier!
.Range("C1").Value = "Überschrift 3"    'wenns mehr als vier Spalten werden,
.Range("D1").Value = "Überschrift 4"    'einfach fortsetzen bis der Artzt kommt. _
_
End With
wksOld.Activate 'zurück zum alten Blatt
Cells(rTables.Row, 1).Resize(lAnzTable, Columns.Count).ClearContents 'alten _
Datensatz löschen
End If
Next rTables
'* Dieser Block löscht die nun nicht mehr benötigten Tabellen 1, 2 und 3.
'* Das "DisplayAlerts" wird abgeschaltet, um das Fenster vom Excel
'* "da kann aber was in der Tabelle sein! Echt löschen?" zu verhindern
Application.DisplayAlerts = False
Sheets("Tabelle1").Delete
Sheets("Tabelle2").Delete
Sheets("Tabelle3").Delete
Application.DisplayAlerts = True
'* Block Tabellenlöschen Ende
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellennamen auf 31 Zeichen kürzen
12.12.2012 15:50:59
Hajo_Zi
rTables ist ein Range und dem kannst Du kein Namen zuweisen.
.Name =left( rTables.Value ,31) 'sheet umbenennen

@Hajo: Range+Name
12.12.2012 16:14:45
Rudi
Hallo,
rTables ist ein Range und dem kannst Du kein Namen zuweisen
aber sicher doch! Warum sollte man einem Bereich keinen Namen zuweisen können?
Range("A1:C20").Name="Blabla"
Gruß
Rudi

AW: Name Range
12.12.2012 16:55:42
Hajo_Zi
Halo Rudi,
dies Aufgabe bestand aber nicht, oder habe ich was überlesen?
Gruß Hajo

Anzeige
es geht um die Aussage. owT
12.12.2012 21:39:26
Rudi

AW: Tabellennamen auf 31 Zeichen kürzen
12.12.2012 15:58:38
Rudi
Hallo,
das
rTables.Name = rTables.Value
ist grottenfalsch! rTables ist eine Zelle. Damit weist du der Zelle ihren Inhalt als Namen zu.
  If InStr(rTables.Value, " ") Then
i = Application.Min(31, InStr(rTables.Value, " ") - 1)
Else
i = Application.Min(31, Len(rTables.Value))
End If
ActiveSheet.Name = Left(rTables.Value, i)
Gruß
Rudi

AW: Tabellennamen auf 31 Zeichen kürzen
12.12.2012 16:18:12
Jan
habs befürchtet, dass es grottig ist
jetzt läufts aber flüssig!!
Gracias!!

Und an die richtige Stelle bitte!
12.12.2012 16:19:14
Klaus
Hi Jan,
           i = Len(rTables.Value)
rTables.Name = rTables.Value
If i > 31 Then rTables.Name = Left(rTables.Name, 31)

diesen Codeteil bitte wieder löschen, und direkt danach:
            With ActiveSheet    'das neu erstellte sheet ist automatisch "active"!
.Name = rTables.Value 'sheet umbenennen
Die Zeile .Name = rTables.Value 1:1 gegen Rudis Code austauschen.
Du warst gedanklich schon nah dran, aber an der falschen Stelle. Du hast versucht das Sheet umzubenennen, bevor es überhaupt erstellt wurde - das hätte auch mit korrekter Syntax nicht funktioniert.
Grüße,
Klaus M.vdT.

Anzeige
AW: Und an die richtige Stelle bitte!
13.12.2012 10:28:29
Jan
Hi Klaus,
danke dir und euch - funktioniert alles bestens!!
Jetzt wird mit dem aufgezeichneten Makro alles schick gemacht :)
Schöne Grüße
Jan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige