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

Tabellen anlegen nach Zellbereich

Tabellen anlegen nach Zellbereich
27.04.2005 12:35:55
Andreas
Hallo Exelfreunde!
Ich habe ein Problem.
Ich möchte mit einem Makro neue Blätter gemäß der Einträge der Zellen A6 bis A200 des ersten Blattes anlegen. Also für jeden Eintrag ein Blatt mit dem Eintrag als Blattnamen. Desweiteren sollten sich die Einträge in Blatt 1 in ein Link zum jeweiligen Blatt ändern. Super wäre es, wenn auf jedem Blatt in Zelle A1 auch ein Link zurück zum Ursprung wäre.
Folgende Parameter müssten beachtet werden:
1. leere Zellen im Bereich A6:A200 des ersten Blattes sollten übersprungen werden
2. die Namen der entstehenden Blätter müssen bei 30 Zeichen abgeschnitten werden (manche Einträge im ersten Blatt sind nämlich länger)
3. nicht erlaubte Sonderzeichen in den Einträgen des ersten Blattes sollen im jeweiligen Tabellennamen weggelassen werden
4. das Makro sollte erkennen ob Blätter schon angelegt sind und diese nicht überschreiben (Aktualisierungsmöglichkeit)
Ich habe einige ähnliche Beispiele hier gefunden. Leider habe ich keine Ahnung von VB und kann diese nicht nach meine Wünschen modifizieren.
Vieleicht kann mir jemand helfen!!
Danke im vorraus!
mfg, Andreas

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

Betreff
Datum
Anwender
Anzeige
AW: Tabellen anlegen nach Zellbereich
27.04.2005 14:40:00
Boris
Hi Andreas,
alles in ein allgemeines Modul und z.B. mittels eines Buttons starten, der sich im Blatt mit den Blattnamen (A6:A200) befindet.
Option Explicit

Sub anlegen()
Dim rng As Range, C As Range, newWs As Worksheet, str As String, Ws As Worksheet, B As Boolean
Set rng = Range("A6:A200").SpecialCells(xlCellTypeConstants)
For Each C In rng
str = Bereinigen(Trim(Left(C.Text, 30)))
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = str Then
MsgBox "Das Blatt " & str & " ist bereits existent,", 64, "Hinweis..."
B = True
Exit For
End If
Next Ws
If B = False Then
Set newWs = Worksheets.Add
newWs.Name = Bereinigen(Trim(Left(C.Text, 30)))
End If
Set newWs = Nothing
B = False
Next C
End Sub


Function Bereinigen(s As String) As String
With Application ': \ / ? * [ ]
Bereinigen = .Substitute(.Substitute(.Substitute(.Substitute(.Substitute(.Substitute(.Substitute(s, ":", ""), "\", ""), "/", ""), "?", ""), "*", ""), "[", ""), "]", "")
End With
End Function

Grüße Boris
Anzeige
Um auch noch den letzten Fehler abzufangen...
27.04.2005 14:46:58
Boris
Hi Andreas,
...der mir derzeit einfällt (wenn sich im Bereich A6:A200 eine Zelle befindet, die nur aus Leerzeichen besteht), diese kleine Änderung:
Option Explicit

Sub anlegen()
Dim rng As Range, C As Range, newWs As Worksheet, str As String, Ws As Worksheet, B As Boolean
Dim startWs As Worksheet
Set startWs = Worksheets("Tabelle1") 'Hier stehen deine Blattnamen - ggfls. anpassen
Set rng = startWs.Range("A6:A200").SpecialCells(xlCellTypeConstants)
Application.ScreenUpdating = False
For Each C In rng
str = Bereinigen(Trim(Left(C.Text, 30)))
If str = "" Then B = True 'Falls nur 1 Leerzeichen in der Zelle stand
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = str Then
MsgBox "Das Blatt " & str & " ist bereits existent.", 64, "Hinweis..."
B = True
Exit For
End If
Next Ws
If B = False Then
Set newWs = Worksheets.Add
newWs.Name = str
End If
Set newWs = Nothing
B = False
Next C
startWs.Activate
Application.ScreenUpdating = True
End Sub


Function Bereinigen(s As String) As String
With Application ': \ / ? * [ ]
Bereinigen = .Substitute(.Substitute(.Substitute(.Substitute(.Substitute(.Substitute(.Substitute(s, ":", ""), "\", ""), "/", ""), "?", ""), "*", ""), "[", ""), "]", "")
End With
End Function

Grüße Boris
Anzeige
AW: Um auch noch den letzten Fehler abzufangen...
27.04.2005 16:29:58
Andreas
Danke für die Hilfe!
Funktioniert ja super. Gibt es vieleicht noch eine Möglichkeit der Verlinkung der Namen auf dem ersten Blatt mit der dazugehörigen Tabelle. Es sind nämlich ca. 150 Blätter.
mfg, Andreas
AW: Um auch noch den letzten Fehler abzufangen...
27.04.2005 17:25:05
Andreas
Hallo Boris!
Habe doch noch ein Problem entdeckt. Es gibt im ersten Blatt Namen die bis zum 30gsten Zeichen gleich sind, für diese Namen werden dann keine Blätter angelegt (weil Sie ja schon da sind). Kann man den Code so verändern, dass solche Blätter fortlaufend nummeriert werden.
Vielen Dank für die Hilfe.
mfg, Andreas
Datenaufbereitung
27.04.2005 19:22:53
Boris
Hi Andreas,
nix für ungut - aber erklär mir doch bitte mal, wie diese - ich nenn sie mal "chaotischen" - Namen in A6:A200 zu Stande kommen?
Warum können Doppelte dabei sein? Warum Leerzellen dazwischen? Warum unerlaubte Sonderzeichen?
Natürlich kann man das mit Aufwand alles per Code erledigen, aber ich denke halt, dass da möglicherweise im Vorfeld bereits einiges schief läuft.
Klär mich doch mal bitte auf - vielleicht geht´s dadurch bereits mit halbem Aufwand.
Grüße Boris
Anzeige
AW: Datenaufbereitung
27.04.2005 19:31:36
Andreas
Hallo Boris!
Danke für deine Mühe.
Die Einträge im ersten Blatt sind Produktnamen aus einem Webshop, welche ich einpflegen muss und in den einzelnen Blättern will ich den Stand der Bearbeitung des einzelnen Produktes festhalten.
Die Produktnamem kommen nicht doppelt vor, sind aber teilweise bis zum 30gsten Zeichen gleich und unterscheiden sich erst dann.
mfg, Andreas
Der neue Code
27.04.2005 23:55:29
Boris
Hi Andreas,
eine Möglichkeit - alles in ein allgemeines Modul:
Option Explicit

Sub anlegen()
Dim rng As Range, C As Range
Dim newWs As Worksheet, Ws As Worksheet, startWs As Worksheet
Dim B As Boolean
Set startWs = Worksheets("Tabelle1") 'Hier stehen deine Blattnamen - ggfls. anpassen
Set rng = startWs.Range("A6:A200")
Application.ScreenUpdating = False
Call entruempeln(rng, startWs)
Set rng = rng.SpecialCells(2)
For Each C In rng
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = C.Text Then
MsgBox "Das Blatt " & C.Text & " ist bereits existent.", 64, "Hinweis..."
B = True
Exit For
End If
Next Ws
If B = False Then
Set newWs = Worksheets.Add
newWs.Name = C.Text
End If
Set newWs = Nothing
B = False
Next C
startWs.Activate
Application.ScreenUpdating = True
End Sub


Sub entruempeln(rng As Range, Ws As Worksheet)
Dim C As Range, arr(), i As Long, j As Long
rng.SpecialCells(4).EntireRow.Delete
Set rng = rng.SpecialCells(2)
ReDim arr(rng.Count)
With Application
For Each C In rng
C = .Trim(Bereinigen(Left(C.Text, 30)))
Next C
For Each C In rng
If .CountIf(Ws.Range(rng(1).Address & ":" & C.Address), C.Text) > 1 Then
arr(i) = C.Text & .CountIf(Ws.Range(rng(1).Address & ":" & C.Address), C.Text)
Else
arr(i) = C.Text
End If
i = i + 1
Next C
End With
For j = 0 To i
rng(j + 1).Value = arr(j)
Next j
End Sub


Function Bereinigen(s As String) As String
With Application ': \ / ? * [ ]
Bereinigen = .Substitute(.Substitute(.Substitute(.Substitute(.Substitute(.Substitute(.Substitute(s, ":", ""), "\", ""), "/", ""), "?", ""), "*", ""), "[", ""), "]", "")
End With
End Function

Aufgerufen wird die Prozedur "anlegen()".
Grüße Boris
Anzeige
AW: Der neue Code
28.04.2005 07:48:58
Andreas
Hallo Boris!
Vielen Dank für die Mühe und deine Geduld. Funktioniert super.
Einen schönen Tag!
mfg, Andreas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige