![]() |
Betrifft: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 22.04.2003 - 10:42:52
Hallo zusammen,
ich habe eine Lieferantendatei. Das erste Tabellenblatt enthält eine Übersicht in der alle Lieferanten enthalten sind. Zusätzlich gibt es für jeden Lieferanten ein eigenes Blatt in dem die Daten (Firma, Anschrift, Anspechpartner, Telefon, Fax, email etc...)aus der Übersicht per sverweis angezeigt werden.
Alle Blätter sind gleich aufgebaut.
Gibt es eine Möglichkeit, sobald in der Übersicht ein neuer Datensatz erzeugt wird, automatisch ein neues Tabellenblatt inkl. aller Verweise zu erzeugen?
Schon mal vielen Dank für Eure Mühe im voraus.
Gruß
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 22.04.2003 - 11:55:01
Hallo Carsten,
'Dieses Makro gehört in Tabelle1 !!!
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 Then Exit Sub
Call TabAnlegen
End Sub
'dieses Makro gehört in Modul !!!
Sub TabAnlegen()Dim I As Long
Dim II As Long
Dim x As Long
Dim Blattname As String
Dim BlattExistiert As BooleanRange("A65536").Select
'ActiveCell.SpecialCells(xlLastCell).Select
x = Selection.End(xlUp).Row
Cells(x, 1).Select
For I = 1 To x
'Check ob Blatt bereits existiert
For II = 1 To Sheets.Count
If Sheets(II).Name = Cells(I, 1) Then
BlattExistiert = True
Exit For
End If
Next II
If BlattExistiert = False Then
'Check ob Zell nicht leer ist
If IsEmpty(Cells(I, 1).Value) = False Then
Blattname = Cells(I, 1).Value
Worksheets(Worksheets.Count).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Blattname
'hier wird der Tabellenname für den Sverweis in A1 eingetragen
Cells(1, 1).Value = Blattname
Worksheets(1).Select
End If
End If
BlattExistiert = False
Next I
Worksheets(1).Select
End Sub
Bitte die Bereiche und Zellen für dein Beispiel anpasen
Gruß
Holger
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 22.04.2003 - 11:56:13
Ich werd's gleich mal testen. Dank schon mal im Voraus.
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 22.04.2003 - 14:15:52
Hallo Holger,
ich bin in VBA nicht sehr fit, das Anpassen der Bereiche werd ich aber noch hinkriegen. Aber ich habe trotzdem noch ein Problem.
Ich habe die Makro erstmal Probeweise unverändert eingefügt und erhalte nun die Fehlermeldung "Sub oder Function nicht definiert"
Woran kann das liegen? Hab ich den zweiten Teil an die falsche Stelle geschrieben?
Gruß
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 22.04.2003 - 15:52:05
Hallo Carsten,
da das Makro ja anspringt, scheint der 1 Teil richtig kopiert zu sein
Nochmal ausführlich:
Alt-F11 öffnet den VBA-Editor, auf der linken Seite sollte der Name deiner Datei erscheinen, Doppelklick auf den Namen.
Nun müßtest du einen "Baum" sehen mit DieseArbeitsmappe, Tabelle1 (Tabelle1), Tabelle2 (Tabelle2), usw.
den 1. Teil kopierst du in Tabelle1 (doppelklick auf Tabelle1 öffnet rechts ein weißes Blatt). Ich gehe davon aus, das in Tabelle1 Spalte1 die Namen geschrieben werden.
den 2. Teil kopierst du in MODUL1, falls das nicht vorhanden ist, mit der rechten Maustaste auf Tabelle1, im Menü einfügen/Modul auswählen. Dann den 2. Teil in Modul einfügen.
Fertig.
Nun wird immer, wenn in Tabelle1 Spalte1 etwas gändert wird das letzte blatt in deiner Mappe kopiert und am Ende eingefügt.
Es sollte in der Mappe bevor du das Makro ausführst mindestens 2 Blätter sein.
Wenn das nicht ist, kann es zu Fehlern kommen.
Konnte allerdings deine Fehlermeldung nicht reproduzieren, arbeite aber mit XL97.
Gruß
Holger
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 23.04.2003 - 08:28:03
Super, so eine Erklärung für doofe wirkt doch manchmal Wunder.
Aber leider gibt es doch noch zwei Probleme:
1. Bei der ersten Eingabe wird ein Blatt mit der Überschrift aus Spalte 1 der Ursprungstabelle erzeugt.
2. Bei jeder Änderung wird ein Blatt mit dem Namen des ersten Datensatzes erzeugt. So kommt es dann zu einer Fehlermeldung da ja zwei Blätter nicht den selben Namen haben können.
Was kann man denn da noch machen?
Gruß
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 23.04.2003 - 15:10:36
Hallo Carsten,
zu 1.:
Damit nicht immer ein Blatt mit der Überschrift erzeugt wird, ändere bitte den Code in MODUL1 von:
"For I = 1 To x" auf "For I = 2 To x" damit wird immer erst ab der 2. Zeile geschaut, ob ein neuer Name dazugekommen ist.
Zu 2.:
Verstehe ich nicht, denn ich habe ja ein Schleife eingebaut, die prüft, ob der Name schon vorhanden ist. Wenn er schon vorhanden ist passiert nichts.
Beschreibe mal das Problem genauer
Gruß
Holger
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 23.04.2003 - 15:25:48
Hallo,
das mit der Überschrift klappt schon mal.
Wenn ich den ersten Datensatz eingebe wird ein neues Blatt erstellt und umbenannt.
Wenn nun ein zweiter Satz eingegeben wird, erstellt er zunächst eine Kopie von Blatt 1, beim Umbenennen kommt jedoch der Laufzeitfehler 1004.
Ich habe jetzt schon verschiedenes probiert, leider bisher erfolglos.
Hast Du noch 'ne Idee?
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 23.04.2003 - 16:11:16
Hallo Carsten,
Ich habe keine Ahnung, warum bei dir der Laufzeitfehler kommt.
Bei mir funzt das einwandfrei.
Kleiner Tipp noch. Das 1. Blatt hat deine Liste. Du solltest das 2. Blatt nicht mit dem Programm einfügen lassen, da dann das Makro in "TABELLE1" mit kopiert wird. Füge liebe ein Blatt so ein, oder lösche das Makro aus dem 2. Blatt. Es würde sonst immer mit kopiert.
Tut mir leid, das ich dir nicht jetzt helfen kann, aber poste doch nochmal deinen abgeänderten Code.
Gruß
Holger
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 24.04.2003 - 09:34:59
Moin Holger,
ich habe das ganze schon so gemacht, d.h. zuerst manuell ein weiteres Blatt eingefügt. Das Blatt ist ja eh anders aufgebaut als die Liste in Tabelle 1.
Meinen geänderten Code habe ich nur getestet, dann aber wieder verworfen da es nicht geklappt hat.
Wie gesagt, der Fehler passiert beim Umbenennen des Blattes und zwar weil er den neuen Namen aus Zelle A1 zieht, diese Zelle aber nach dem kopieren nicht geändert wird.
Ich wollte ihn nun dazu bringen, vor dem Umbenennen den Zellinhalt mit der neuesten Positionsnummer aus Spalte 1/Tabelle 1 zu überschreiben.
Hat leider noch nicht geklappt da er an der Stelle an der ich umbenennen wollte in den Code der Tabelle1 gesprungen ist. Warum??? Ich habe nicht die geringste Ahnung.
Irgendwas habe ich jedenfalls falsch gemacht.
Hast Du noch die eine oder andere Idee?
Danke Dir zum x-ten Mal für Deine Mühe.
Gruß
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 24.04.2003 - 09:46:04
Hallo Carsten,
ich kann dir so leider nicht helfen. Schicke mit mal deine Tabelle an panicman_de@gmx.de. Dann schau ich mir die mal an.
Gruß
Holger
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 24.04.2003 - 11:10:20
Hallo Carsten,
habe den Fehler gefunden. Das Problem war, das in deiner 1 Spalte Zahlen stehen (ich bin von Text ausgegangen). Wir haben immer den Blattnamen (String=Text) mit der Zelle(I,1) (in deinem Fall Zahl) verglichen. Excel konnte nicht merken, ob die beiden gleich sind. änder mal die Zeile:
If Sheets(II).Name = Cells(I, 1) Then
in
If Sheets(II).Name = Format(Cells(I, 1), "@") Then
Dann wird Text mit Text verglichen und alles klappt.
Gruß
Holger
P.S. wenn du lieber eine andere Spalte der Tabelle1 als Blattnamen willst, muß du dich noch mal melden.
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 24.04.2003 - 11:41:03
Kleine Ursache, große Wirkung. Jetzt klappts.
Zu Deinem Angebot: Was müßte ich ändern um den Namen den Kunden als Blattnamen zu erhalten?
Gruß
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Carsten
Geschrieben am: 24.04.2003 - 11:51:47
Hallo Holger,
hab's schon selber hingekriegt. Jetzt läuft's wie es soll.
Nochmal vielen Dank für Deine Hilfe.
Gruß
Carsten
![]() ![]() |
Re: Bei neuem Datensatz neues Blatt erzeugen
von: Panicman
Geschrieben am: 24.04.2003 - 11:53:42
Hallo Carsten,
nicht so viel:
in Makro1 (Tabelle1): von "If Target.Column <> 1 Then Exit Sub" auf "If Target.Column <> 2 Then Exit Sub" ändern, da 2 Spalte B ist.
in Makro2 (Modul): "Range("A65536").Select" in "Range("B65536").Select" ändern und bei allen cells(...) die 1 auf die 2 ändern.
also so:
'Tabelle1
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 2 Then Exit Sub
Call TabAnlegen
End Sub'Modul
Sub TabAnlegen()Dim I As Long
Dim II As Long
Dim x As Long
Dim Blattname As String
Dim BlattExistiert As BooleanRange("B65536").Select
'ActiveCell.SpecialCells(xlLastCell).Select
x = Selection.End(xlUp).Row
Cells(x, 2).Select
For I = 2 To x
'Check ob Blatt bereits existiert
For II = 1 To Sheets.Count
If Sheets(II).Name = Format(Cells(I, 2), "@") Then
BlattExistiert = True
Exit For
End If
Next II
If BlattExistiert = False Then
'Check ob Zell nicht leer ist
If IsEmpty(Cells(I, 2).Value) = False Then
Blattname = Cells(I, 2).Value
Worksheets(Worksheets.Count).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Blattname
'hier wird der Tabellenname für den Sverweis in A1 (=Cells(1 , 1))eingetragen
Cells(1, 1).Value = Blattname
Worksheets(1).Select
End If
End If
BlattExistiert = False
Next I
Worksheets(1).Select
End Sub
Gruß
Holger
![]() |