Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anlegen, Benennen und Füllen von Registerblättern per Makro

Forumthread: Anlegen, Benennen und Füllen von Registerblättern per Makro

Anlegen, Benennen und Füllen von Registerblättern per Makro
23.05.2024 16:31:52
Kitekat
Hallo zusammen,

ich benötige Hilfe bei einem Excel-Makro und hoffe, ihr könnt mir helfen? :-)

Beispieldatei: https://www.herber.de/bbs/user/169668.xlsm

Ich habe eine Datei die aus den Registern "Übersicht" und "Vorlage" besteht.
In der Übersicht sind Mitarbeiter vorhanden, für diese soll nach der Vorlage ein Register angelegt werden. Hierfür habe ich auch ein passendes Makro gefunden:
Sub Anlegen()

Dim Wiederholungen As Long
Dim wksL As Worksheet
Set wksL = Worksheets("Übersicht")
Application.ScreenUpdating = False
Worksheets("Übersicht").Activate

For Wiederholungen = 1 To Range("A65536").End(xlUp).Row

If Cells(Wiederholungen, 1) > "" Then
Worksheets("Vorlage").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = wksL.Cells(Wiederholungen, 1).Text

Else
Exit Sub
End If
Worksheets("Übersicht").Activate
Next

Set wksL = Nothing

Application.ScreenUpdating = True
End Sub


Allerdings sollen in dem pro Mitarbeiter angelegten Tabellenblatt auch die Felder Name, Vorname, Geburtsdatum, Vertragsbeginn, Vertragsende, Einrichtung und Arbeitstage/Woche gefüllt werden.

Könnt ihr mir hier helfen?

Liebe Grüße
Kitekat
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anlegen, Benennen und Füllen von Registerblättern per Makro
23.05.2024 16:58:55
schauan
Hallöchen,

Du hast in Deinem Code ja diese Zeile:

ActiveSheet.Name = wksL.Cells(Wiederholungen, 1).Text


Da gibst Du dem neuen Blatt den Namen aus einer bestimmten Zelle - ich nehme an, es ist der Mitarbeiter.

Der steht
--> auf dem Blatt Übersicht - das ist wksL
-- in Spalte A . das ist die 1
--> in Zeile Wiederholungen - das ist der Wet, der durch die Schleifenwiedrholung hochgezählt wird

Du könntest dann den Code ergänzen

ActiveSheet.Name = wksL.Cells(Wiederholungen, 1).Text

ActiveSheet.Cells(x, y) = wksL.Cells(Wiederholungen, 2).Text
ActiveSheet.Cells(u, v) = wksL.Cells(Wiederholungen, 3).Text
'usw.


x,y bzw. u,v steht für Zeile, Spalte, wo der Eintrag auf dem neuen Blatt erfolgt, z.B. Vorname, Geburtsdatum usw.
,2 / ,3 wären dann in der Zeile des Mitarbeiters auf der Übersicht der Vormmname und das Geburtsdatum usw. Ist das nicht Spalte B (2) und C (3), dann zutreffende Nummern programmieren.

Übrigens kann man die mehrfachen ActiveSheets einsparen mit
With ActiveSheet

.Name = wksL.Cells(Wiederholungen, 1).Text
.Cells(x, y) = wksL.Cells(Wiederholungen, 2).Text
.Cells(u, v) = wksL.Cells(Wiederholungen, 3).Text
'usw.
End With


Mitarbeiternamen hast Du hoffentlich nicht doppelt? Ansonsten läuft Dein Code auf einen Fehler.

Anzeige
AW: Anlegen, Benennen und Füllen von Registerblättern per Makro
24.05.2024 06:54:34
Kitekat
Hallo und vielen Dank für eure Antworten. Ihr habt mir echt sehr geholfen und nun klappt es! :-)

Tatsächlich habe ich einige Mitarbeiternamen doppelt und manche haben so lange Namen, dass die Bezeichnung der Registerkarte nicht klappt, dann bricht das Makro ab. Also habe ich mir als "Behelfskrücke" diese Leute vorher aussortiert und etwas anders benannt.

Liebe Grüße
Kitekat
Anzeige
AW: Anlegen, Benennen und Füllen von Registerblättern per Makro
23.05.2024 17:00:40
peter
Hallo


Nach folgendem Muster



If Cells(Wiederholungen, 1) > "" Then
Worksheets("Vorlage").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = wksL.Cells(Wiederholungen, 1).Text
ActiveSheet.Range("D3").Value = wksL.Cells(Wiederholungen, 2).Text
ActiveSheet.Range("D4").Value = wksL.Cells(Wiederholungen, 3).Text
...


Peter
Anzeige
AW: Anlegen, Benennen und Füllen von Registerblättern per Makro
23.05.2024 22:48:30
daniel
Hi
der Fehler liegt in der Formel in Zelle C100 in der Vorlage.
du musst bei der Funktion ZELLE auch noch zusätzlich einen Zellbezug auf auf das Blatt, dessen Name ausgegeben werden soll, angeben.
dh in C100:
=TEIL(ZELLE("dateiname";A1);FINDEN("]";ZELLE("dateiname";A1))+1;999)


dann klappts auch mit dem Tabellenblattnamen und deine Formeln funktionieren.

als Code sollte dann das reichen:
Sub Anlegen2()

Dim Zelle As Range
Application.PrintCommunication = False
With Sheets("Übersicht")
For Each Zelle In .Range(.Cells(2, 1), .Cells(1, 1).End(xlDown))
Sheets("Vorlage").Copy after:=Sheets(ActiveWorkbook.Sheets.Count)
ActiveSheet.Name = Zelle.Value
Next
.Select
End With
End Sub


wenn du viele Zeilen hast und das Makro länger dauert, dann kannst du neben dem
Application.ScreenUpdating = False

noch folgendes ausschalten, um die die Sache zu beschleunigen:
Application.PrintCommunication = False

beim Sheet-Kopieren unterhält sich Excel erstmal ein Weilchen mit dem Drucker, vermutlich wegen der Seiteneinrichtung, die ja für das Blatt angelegt wird. Damit kannn diesen "Smalltalk" unterbinden.

Gruß Daniel
Anzeige
Zu dieser Problematik...
24.05.2024 12:13:06
Case
Moin, :-)

... würde mich eine Info interessieren. Damit arbeite ich aus dem Grund (PageSetup)...

https://learn.microsoft.com/de-de/office/vba/api/excel.application.printcommunication

... ja auch. Beim kopieren von Tabellenblättern ist mir das noch nicht aufgefallen.

Habe eben mal 500 Tabellenblätter aus einer Vorlage per VBA kopiert. Mit und ohne "PrintCommunication". Ohne es auf "False" zu setzten war es sogar etwas schneller.

Hast du einen Link, wo das beschrieben wird?

Servus
Case
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige