Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1024to1028
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

Tabellenblätter gem. Raumbuch automatisch anlegen

Tabellenblätter gem. Raumbuch automatisch anlegen
16.11.2008 17:49:00
obelix-xxl
Hallo,
in der Tabelle "Räume" habe ich alle Räume eines Gebäudes untereinander aufgelistet. Die Raumnummern stehen in Spalte C ab Zeile 10 bis in Zeile 500. Die Räume können auch mit Zahlen durch punkt oder durch negative Zahlen benannt sein, z.B. -1.222 oder 3.42 oder Technik oder WC D, ....
In einer weiteren Tabelle "Raumvorlage" befindet sich die Mustervorlage für die anzulegenden Tabellenblätter.
Nun möchte ich mit einem Makro gerne für alle Räume je eine Seite gem. Raumvorlage anlegen.
Wer kann mir hierzu mit seinen Erfahrungen zur Seite stehen und mir bitte helfen?
liebe Grüsse
obelix

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblätter gem. Raumbuch automatisch anle
16.11.2008 18:21:00
Matthias
Hallo
Code in ein Modul

Option Explicit
Sub BlätterAusListeErstellen()
Dim x As Long
Application.ScreenUpdating = False
With Worksheets("Räume")
For x = 10 To 40 'anpassen
Sheets("Raumvorlage").Copy After:=Sheets(Sheets.Count)
Sheets("Raumvorlage (2)").Select
Sheets("Raumvorlage (2)").Name = .Cells(x, 3).Text
Next
End With
Application.ScreenUpdating = True
End Sub


hier ein Beispiel:
https://www.herber.de/bbs/user/56829.xls
Gruß Matthias

AW: Tabellenblätter gem. Raumbuch automatisch anle
16.11.2008 20:43:42
obelix-xxl
Hallo Matthias,
ich habe jetzt Deine Lösung genutzt.
Dabei ist mir noch eine Kleinigkeit aufgefallen: Erst wenn ich den Debugger beende wird das Makro ausgeführt.
Nachfolgende Fehlermeldung erscheint beim Debuggen:
Laufzeitfehler '1004'
Anwendungs- oder objektdefinierter Fehler
Woran liegt das?
Kann man im Makro noch festlegen, dass der Tabellenblattname in Zelle F2 eingetragen wird?
Das wäre prima.
liebe Grüsse
obelix
Anzeige
so geht's ...
16.11.2008 21:10:07
Matthias
Hallo

Sub BlätterAusListeErstellen()
Dim x As Long
Application.ScreenUpdating = False
With Worksheets("Räume")
For x = 10 To 40 'anpassen
Sheets("Raumvorlage").Copy After:=Sheets(Sheets.Count)
Sheets("Raumvorlage (2)").Select
Sheets("Raumvorlage (2)").Name = .Cells(x, 3).Text
  ActiveSheet.Range("F2") = ActiveSheet.Name
Next
End With
Application.ScreenUpdating = True
End Sub


Und bei mir kommt kein Laufzeitfehler.
Gruß Matthias

AW: so geht's ...
16.11.2008 21:25:00
obelix-xxl
Hallo Matthias,
danke für die Unterstützung.
Der Laufzeitfehler steht weiterhin an. Liegt dies an vielleicht unterschiedlichen Excel-Versionen? Ich habe Excel-2000 in Nutzung.
Oder tritt der Fehler wegen der Schreibweise von den "Raumnamen" auf? Bei 1.22 (1 Punkt 2 2) erscheint 1,22 (1 Komma 2 2) ?
Oder liegt es daran, dass der Tabellenblattname Raumvorlage mit kopiert wird und als neuer Tabellenblattname Raumvorlage (2) eingefügt wird?
liebe Grüsse
obelix
Anzeige
AW: so geht's ...
16.11.2008 21:40:51
Matthias
Hallo
Also ich nutze ebenfalls XL2000
ok, ... das mit dem Komma tritt auch bei mir auf. Aber ich bekomme keinen Laufzeitfehler.
evtl. die Zelle F2 vorher als Text formaieren, könnte schon helfen.
also in etwa so:

Sub BlätterAusListeErstellen()
Dim x As Long, Strg As String
Application.ScreenUpdating = False
With Worksheets("Räume")
For x = 10 To 40 'anpassen
Sheets("Raumvorlage").Copy After:=Sheets(Sheets.Count)
Sheets("Raumvorlage (2)").Select
Sheets("Raumvorlage (2)").Name = .Cells(x, 3).Text
Strg = ActiveSheet.Name
ActiveSheet.Range("F2").NumberFormat = "@"
ActiveSheet.Range("F2").Value = Strg
Next
End With
Application.ScreenUpdating = True
End Sub


Hast Du die Variable auch wirklich als LONG deklariert?
Gruß Matthias

Anzeige
Sorry, ... formaieren=formatieren ... oT
16.11.2008 21:45:00
Matthias
AW: Sorry, ... formaieren=formatieren ... oT
16.11.2008 22:25:36
obelix-xxl
Hallo Matthias,
von VBA habe ich keinen blassen Schimmer, daher erkläre mir bitte noch was Du damit meinst:
"Hast Du die Variable auch wirklich als LONG deklariert?"
Wo deklariere ich die Variable als LONG? Da könnte die Fehlermeldung herkommen.
liebe Grüsse
obelix
Erklärung: Deklaration v. Variablen
17.11.2008 08:00:00
Matthias
Hallo
hier erstmal ein Vorschlag ohne .Select
Code gehört in ein Modul

Sub BlätterAusListeErstellen()
Dim x As Long, Strg As String
Application.ScreenUpdating = False
With Worksheets("Räume")
For x = 10 To 40 'anpassen
Sheets("Raumvorlage").Copy After:=Sheets(Sheets.Count)
Sheets("Raumvorlage (2)").Name = .Cells(x, 3).Text
Strg = ActiveSheet.Name
ActiveSheet.Range("F2").NumberFormat = "@"
ActiveSheet.Range("F2").Value = Strg
Next
End With
Application.ScreenUpdating = True
End Sub


Variablen deklarieren:


Dim x As Long, Strg As String
Schau Dir in der Hilfe die Datentypen an. Dort wird der Wertebereich beschrieben und der
reservierte Speicherbedarf angezeigt
Der Datentype LONG reserviert 4 Byte
und hat den Wertebereich: -2.147.483.648 bis 2.147.483.647
Der DatenType STRING gibt hingegen nur Text zurück und hat einen
Wertebereich von: 1 bis ca. 65.400
Deklaruiere also immer nach der Sub() - Zeile die Variablen,
damit Excel den entsprechenden Speicherplatz reserviert.


dazu folgendes Beispiel:

Sub Beispiel()
Dim X As Byte
For X = 1 To 256
Cells(X, 1) = X
Next
End Sub


Dieser Code verursacht einen Überlauf, da X als Byte deklariert ist
Byte hat aber nur einen Wetebereich von 1-255 und reserviert wird 1 Byte
Die Schleife hingegen geht aber bis 256
Fazit: Du solltest also die Variable X mind. als Integer daklarieren
Dim X As Integer
Integer hat den Datenbereich von: -32.768 bis 32.767 und reserviert werden 2 Byte



ansonsten steht das alles in der ExcelHilfe (F1).
Solle es immer noch Probleme geben, lad die Mappe hoch.
Gruß Matthias
Anzeige
AW: Erklärung: Deklaration v. Variablen
17.11.2008 10:25:00
obelix-xxl
Hallo Matthias,
Deine Tipps habe ich ausprobiert und komme wegen des Debuggens nicht weiter.
Der Fehler wird weiterhin gemeldet.
Vielleicht hast Du noch Lust und Laune Dir die hochgeladene Datei mal anzuschauen:
https://www.herber.de/bbs/user/56848.xls
Ich danke für Deinen Einsatz.
liebe Grüsse
obelix
AW: Erklärung: Deklaration v. Variablen
17.11.2008 10:38:07
yusuf
Hi,
hab mich nicht alles durchgelesen aber eventuell hilft ja dies hier.
Option Explicit

Sub BlätterAusListeErstellen()
Dim x As Integer, Strg As String
'Application.ScreenUpdating = False
With Worksheets("Räume")
For x = 10 To 40 'anpassen
Sheets("Raumvorlage").Copy After:=Sheets(Sheets.Count)
If .Cells(x, 3).Text = "" Then
Exit For
End If
Sheets("Raumvorlage (2)").Name = .Cells(x, 3).Text
Strg = ActiveSheet.Name
ActiveSheet.Range("F2").NumberFormat = "@"
ActiveSheet.Range("F2").Value = Strg
Next
End With
'Application.ScreenUpdating = True
End Sub


Hab noch eine abfrage eingebaut in das bestehende Makro.
Probier diese Makro doch bitte mal aus.
Gruß
Yusuf

Anzeige
geht schon, aber ...
17.11.2008 10:55:00
Matthias
Hallo
Es ist besser die Schleife anzupassen.
Bei Deinem Vorschlag bleibt am Ende ein Blatt "Raumvorlage (2)" übrig.
Das ist sicher so nicht gewollt.
Gruß Matthias
AW: Erklärung: Deklaration v. Variablen
17.11.2008 10:43:40
Matthias
Hallo
For x = 10 To 40 'anpassen
'anpassen, das hatte ich extra dazugeschrieben !!
For x = 10 To 16
Ist doch logisch. Ein neuer Blattname muß auch einen Blattamen bekommen
und wenn Du die Schleife bis 40 durchlaufen lässt, ist bei Zeile 17 Schluss. Da steht nix mehr in C17.
Ein Leerstring als BlattName ist nicht möglich.
Du mußt sowieso noch eine Fehlerroutine einbauen. Denn wenn Du den Code ein 2.Mal laufen lässt, dann existieren die Blattnamen schon. Das würde wieder zu einem Fehler führen.
aber probiere es erstmal mit der Schleife bis 16
Hast Du es jetzt verstanden?
Gruß Matthias
Anzeige
AW: Erklärung: Deklaration v. Variablen
17.11.2008 11:14:00
obelix-xxl
Hallo Matthias,
jetzt habe ich verstanden.
Ich war davon ausgegangen, dass auch die Leerzellen zwischen 16 und z.B. 40 mit abgefragt werden. Da diese Lücke nicht gefüllt war, kann also auch kein Tabellenblatt über den Bereich der Zelle 16 (bis 40) hinaus erzeugt werden.
Danke.
Das Tabellenblatt Raumvorlage (2) wird weiterhin erzeugt.
Wie kann ich denn das Überschreiben verhindern?
Du mußt sowieso noch eine Fehlerroutine einbauen. Denn wenn Du den Code ein 2.Mal laufen lässt, dann existieren die Blattnamen schon. Das würde wieder zu einem Fehler führen.
liebe Grüsse
obelix
Anzeige
AW: Erklärung: Deklaration v. Variablen
17.11.2008 11:28:00
Matthias
Hallo
Das Tabellenblatt Raumvorlage (2) wird weiterhin erzeugt
also wenn Du die Schleife nur bis 16 laufen läßt (in Deiner Beispieltmappe)
wird das Blatt "Raumvorlage (2)" nicht nochmal erzeugt
Wenn X=16 erreicht hat steigt die Schleife aus und es ist Feierabend.
Userbild
Das mit der Fehlerroutine(ob Blattname schon vorhanden ist) , schaff ich jetzt nicht mehr.
Muß jetzt dringend fort.
Ich schau aber heute abend nochmal rein.
Gruß Matthias
AW: Erklärung: Deklaration v. Variablen
17.11.2008 19:16:54
obelix-xxl
Hallo Yusuf,
Hallo Matthias,
ich danke Euch beiden für die Lösungen. Beide erfüllen Ihren Zweck und erleichtern mir das Anlegen der gewünschten Tabellenblätter.
Vielleicht kann einer von Euch beiden noch die Lösung für für zuvor beschriebene Fehlerroutine, die eine Überschreiben bereits angelegter Tabellenblätter verhindert, in das Makro einbinden?
Ich möchte keinem von Euch beiden auf den "Schlips" treten. Danke für Eurer Verständnis.
liebe Grüsse
obelix
Anzeige
AW: Erklärung: Deklaration v. Variablen
18.11.2008 00:30:00
Matthias
Hallo


Zitat:
Vielleicht kann einer von Euch beiden noch die Lösung für für zuvor beschriebene Fehlerroutine, die eine Überschreiben bereits angelegter Tabellenblätter verhindert, in das Makro einbinden?


Nein, das habe ich so nicht geschrieben. Es wird kein Tabelleblatt überschrieben.
Sollte ein Blatt mit dem entsprechendem Namen schon vorhanden sein,
wird von Excel ein Fehler zurückgegeben.
Deshalb der Vorschlag eine Fehlerroutine einzuarbeiten.
Hier habe ich ein Beispiel erstellt:
https://www.herber.de/bbs/user/56873.xls
In einer inneren Schleife werden alle Blattnamen verglichen
Existiert also ein Blattname schon wird über Goto das Next der äußeren Schleife aufgerufen.
Solltest Du etwas nicht verstanden haben, dann frage ruhig nach. Ich erkläre Dir dann die einzelnen Schritte im Programmcode.
Gruß Matthias
Anzeige
AW: Erklärung: Deklaration v. Variablen
18.11.2008 19:08:00
obelix-xxl
Hallo Matthias,
ich melde mich erst jetzt, nachdem ich Deine Lösung ausgiebig studiert habe.
Es funktioniert genau so wie gewünscht. Ein ganz dickes Lob.
Ich habe hier im Forum schon einige Anfragen eingestellt und immer prima Lösungen erhalten.
Aber solch weitreichende Informationen und Erklärungen wie Du Deinem Makro beigefügt hast sind fast wie ein VBA-Kursus. Einfach super vorbildlich.
Die Erklärung der Schleife war mir sofort wieder aus meinen wenigen Programmiererfahrung in Basic bekannt. Da war es dann einfacherer ein paar "Geheimnisse" im Makro zu verstehen.
Schön ist auch der Hinweis in der MsgBox "...obelix".
Also nochmals vielen Dank.
Vielleicht darf ich bei nächster Problemlösung wieder Deine hilfreiche Unterstützung erwarten.
liebe Grüsse
obelix
auf Hilfe aus dem Forum kannst Du immer zählen ...
18.11.2008 22:50:00
matthias
Hallo
Vielen Dank für Deine Rückmeldung
Wenn es in meiner Macht steht helfen zu können, werde ich das auch in Zukunft tun.
weiterhin viel Erfolg
Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige