Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
956to960
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
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arbeitsblätter automatisch benennen

Arbeitsblätter automatisch benennen
04.03.2008 08:06:00
J.
Hallo
Ich habe hier zwei Makros, die mehrere Arbeitsblätter erstellen, und ihnen je nach dem was in einer Zelle steht, einen Namen zuordnen. Dabei durchsucht das Programm eine Liste , die ständig erweitert wird, und soll falls nicht vorhanden , aus einem Listeneintrag ein Tabellenblatt machen. Leider erhalte ich momentan nur den Laufzeitfehler 1004 wenn ein Eintrag der bereits besteht als neues Arbeitsblatt erstellt wird, und ich hätte es gerne so, dass das Programm, sofern bereits ein passendes Arbeitsblatt vorhanden ist, dieses Überspringt.
Hier ist mal der Programm Code

Sub NeuesBlattundName()
Dim rngC As Range, wks As Worksheet
With Sheets(1)
For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
On Error Resume Next
Set wks = Worksheets(rngC.Value)
On Error GoTo 0
If wks Is Nothing Then
rngC.EntireRow.Copy Worksheets.Add(after:=Sheets(Sheets.Count)).Cells(1, 1)
ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
End If
Set wks = Nothing
Next
End With
End Sub



Function CheckSheetName(strName As String) As String
Dim strNotAllowed As Variant
Dim n As Integer
'Im Tabellennamen nicht zulässige Zeichen
strNotAllowed = Array(":", "\", "/", "?", "*", "[", "]")
'unerlaubte Zeichen durch nichts ersetzen
For n = 0 To UBound(strNotAllowed)
strName = Replace(strName, strNotAllowed(n), "")
Next
'Namen auf 31 Zeichen begrenzen
CheckSheetName = Left(strName, 31)
End Function


15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitsblätter automatisch benennen
04.03.2008 08:45:00
Micha
Hallo,
probiers mal so (ungetestet)

Sub NeuesBlattundName()
Dim rngC As Range, wks As Worksheet
With Sheets(1)
For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
On Error Resume Next
Set wks = Worksheets(Left(rngC.Value, 31))
On Error GoTo 0
If wks Is Nothing Then
rngC.EntireRow.Copy Worksheets.Add(after:=Sheets(Sheets.Count)).Cells(1, 1)
ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
End If
Set wks = Nothing
Next
End With
End Sub


Micha

AW: Arbeitsblätter automatisch benennen
04.03.2008 08:55:47
J.
Hi
ich hab das gerade mal getestet, aber es funktioniert leider nicht.
Erhalte den Laufzeitfehler 1004 und der markiert folgende Zeile
ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))

Anzeige
AW: Arbeitsblätter automatisch benennen
04.03.2008 10:36:13
Micha
Hallo,
vielleicht so.
ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1).text)
ansonsten übergibst Du ein Objekt (erwartet wird ein String)
M

AW: Arbeitsblätter automatisch benennen
04.03.2008 10:56:10
J.
nein, klappt leider nicht. Gleiche Fehlermeldung und es wird auch dei gleiche Zeile markiert

AW: Arbeitsblätter automatisch benennen
04.03.2008 12:43:00
Micha
hallo,
dann vielleicht so..

Sub NeuesBlattundName()
Dim rngC As Range, wks As Worksheet
With Sheets(1)
For Each rngC In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
On Error Resume Next
Set wks = Worksheets(CheckSheetName(Left(rngC.Value, 31)))
On Error GoTo 0
If wks Is Nothing Then
set new_wrksh = Worksheets.Add(after:=Sheets(Sheets.Count)).
rngC.EntireRow.Copy new_wrksh.Cells(1, 1)
new_wrksh.name = CheckSheetName(ActiveSheet.Cells(1, 1))
End If
Set wks = Nothing
Next
End With
End Sub


Anzeige
AW: Arbeitsblätter automatisch benennen
04.03.2008 13:20:00
J.
hi
schon beim kopieren in den editor wird mir eine Zeile rot markiert
set new_wrksh = Worksheets.Add(after:=Sheets(Sheets.Count)).

AW: Arbeitsblätter automatisch benennen
04.03.2008 13:37:00
J.
hi
schon beim kopieren in den editor wird mir eine Zeile rot markiert
set new_wrksh = Worksheets.Add(after:=Sheets(Sheets.Count)).

AW: Arbeitsblätter automatisch benennen
04.03.2008 14:55:00
Micha
ohne punkt natürlich

AW: Arbeitsblätter automatisch benennen
04.03.2008 15:01:00
J.
leider immer noch laufzeitfehler 1004
new_wrksh.Name = CheckSheetName(ActiveSheet.Cells(1, 1))

AW: Arbeitsblätter automatisch benennen
04.03.2008 19:24:00
Fred
Hi,
Sonderzeichen in der Zelle?
Mehr als 31 Zeichen?
mfg Fred

AW: Arbeitsblätter automatisch benennen
05.03.2008 13:51:49
J.
Hi
Sonderzeichen etc. werden bereits in dem Modul "checksheetname" ausgefiltert

Anzeige
AW: Arbeitsblätter automatisch benennen
04.03.2008 15:01:00
Micha
Noch mal Hallo,
ich kanns leider nicht testen........
schreibe Dir hier aus dem Gedächtnis.
vielleicht hat jemand anderes eine besere Idee:-)
Deshalb Frage auf offen.
micha

AW: Arbeitsblätter automatisch benennen
04.03.2008 15:31:00
J.

AW: Arbeitsblätter automatisch benennen
04.03.2008 09:34:46
Mag
Hi,
muss es nicht heissen:

ActiveSheet.Name = CheckSheetName(rngC)


und


Function CheckSheetName(ByVal strName As String) As String


und die Logik stimmt nicht - prüfen ob sheet vorhanden vor Aufruf der Funktion, dann erstellen mit Name von Funktion?
Gruss

Anzeige
AW: Arbeitsblätter automatisch benennen
05.03.2008 08:34:36
Micha
Hallo,
also, ich hab es jetzt getestet (so wie es unten steht)
und es funktioniert klaglos...
Einzige Änderung ist rot gekennzeichnet.

Sub NeuesBlattundName()
Dim rngC As Range, wks As Worksheet
With Sheets(1)
For Each rngC In .Range("A1:A5")
On Error Resume Next
Set wks = Worksheets(CheckSheetName(rngC.Value)) _
)
On Error GoTo 0
If wks Is Nothing Then
rngC.EntireRow.Copy Worksheets.Add(after:=Sheets(Sheets.Count)). _
Cells(1, 1)
ActiveSheet.Name = CheckSheetName(ActiveSheet.Cells(1, 1))
End If
Set wks = Nothing
Next
End With
End Sub



Function CheckSheetName(strName As String) As String
Dim strNotAllowed As Variant
Dim n As Integer
'Im Tabellennamen nicht zulässige Zeichen
strNotAllowed = Array(":", "\", "/", "?", "*", "[", "]")
'unerlaubte Zeichen durch nichts ersetzen
For n = 0 To UBound(strNotAllowed)
strName = Replace(strName, strNotAllowed(n), "")
Next
'Namen auf 31 Zeichen begrenzen
CheckSheetName = Left(strName, 31)
End Function


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige