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

Erstellung eines Makros

Erstellung eines Makros
05.01.2021 12:25:04
Stockl
Hallo, ich habe keine Kenntnisse in VBA und hoffe auf HILFE.
Was will ich?
Ich habe eine größere Datei und möchte noch etwas automatisieren. Dazu würde ich ein Makro als Muster benötigen. Dies würde ich dann selbst so verändern/anpassen, dass es für mich verwendbar wird.
In diesem Makro sollte folgender Schritt beschrieben werden:
Wenn im Arbeitsblatt „Name“ in D3 = „A“ steht, dann aus dem Arbeitsblatt „Dienstzyklus“ die Zeile „B6“ bis „AF6“ in das Arbeitsblatt „1“ in „B18“ bis „AF18“ kopieren, wenn nicht dann nichts.
Wenn im Arbeitsblatt „Name“ in D3 = „B“ steht, dann aus dem Arbeitsblatt „Dienstzyklus“ die Zeile „B8“ bis „AF8“ in das Arbeitsblatt „1“ in „B18“ bis „AF18“ kopieren, wenn nicht dann nichts.
Wenn im Arbeitsblatt „Name“ in D3 = „C“ steht, dann aus dem Arbeitsblatt „Dienstzyklus“ die Zeile „B10“ bis „AF10“ in das Arbeitsblatt „1“ in „B18“ bis „AF18“ kopieren, wenn nicht dann nichts.
Wenn im Arbeitsblatt „Name“ in D3 = „D“ steht, dann aus dem Arbeitsblatt „Dienstzyklus“ die Zeile „B12“ bis „AF12“ in das Arbeitsblatt „1“ in „B18“ bis „AF18“ kopieren, wenn nicht dann nichts.
Wenn im Arbeitsblatt „Name“ in D3 = „E“ steht, dann aus dem Arbeitsblatt „Dienstzyklus“ die Zeile „B14“ bis „AF14“ in das Arbeitsblatt „1“ in „B18“ bis „AF18“ kopieren, wenn nicht dann nichts.
Wenn Arbeitsblatt „Name“ in D3 = „""“ steht - dann nichts eintragen.

Wenn für ein besseres Verständnis die Datei benötigt wird könnte ich sie auch Hochladen.
Danke im Voraus, Stockl

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Erstellung eines Makros
05.01.2021 12:31:55
Hajo_Zi
Benutze Autofilter und Kopiere den sichtbaren Bereich, Start, Bearbeiten, Suchen..., Gehe zu, Inhalte, sichtbare Zellen.
Excel hat auch einen Makrorecorder.

AW: Erstellung eines Makros
05.01.2021 14:23:31
Stockl
Hallo Hajo,
es handelt sich um einen Schichtplan. Das Blatt "Name" ist gefüllt mit Namen und da der Monat wechselt und somit immer neue Schichten fällig werden soll das Makro per Butten ausgelöst werden. Da werde ich mit Autofilter nicht zurechtkommen. Hier sind bis zu 170 Kollegen drin.
Werde mich auf jedenfall damit beschäftigen.
Mein Problem ist auch, wenn ich nicht da bin und ein anderer Kollege soll ihn vorbereiten, dann sehe ich schwarz. Aus diesem Grund würde ich es mittels Makro vorziehen.
Gruss Stockl
Anzeige
AW: Erstellung eines Makros
05.01.2021 12:40:06
Nepumuk
Hallo Stockl,
soll das per Button passieren oder bei der Eingabe des Buchstabens?
Gruß
Nepumuk
AW: Erstellung eines Makros
05.01.2021 14:04:03
Stockl
Hallo Nepumuk, das soll per Butten gehen.
AW: Erstellung eines Makros
05.01.2021 14:13:01
Nepumuk
Hallo Stockl,
teste mal:
Option Explicit

Public Sub Kopieren()
With ThisWorkbook.Worksheets("Dienstzyklus")
    Select Case UCase$(ThisWorkbook.Worksheets("Name").Range("D3").Text)
        Case "A"
            Call .Range("B6:AF6").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
        Case "B"
            Call .Range("B8:AF8").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
        Case "C"
            Call .Range("B10:AF10").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
        Case "D"
            Call .Range("B12:AF12").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
        Case "E"
            Call .Range("B14:AF14").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
    End Select
End Sub

Gruß
Nepumuk
Anzeige
AW: Erstellung eines Makros
05.01.2021 14:14:41
Nepumuk
Oops,
da fehlt eine Zeile:
Option Explicit

Public Sub Kopieren()
    With ThisWorkbook.Worksheets("Dienstzyklus")
        Select Case UCase$(ThisWorkbook.Worksheets("Name").Range("D3").Text)
            Case "A"
                Call .Range("B6:AF6").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
            Case "B"
                Call .Range("B8:AF8").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
            Case "C"
                Call .Range("B10:AF10").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
            Case "D"
                Call .Range("B12:AF12").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
            Case "E"
                Call .Range("B14:AF14").Copy(Destination:=ThisWorkbook.Worksheets("1").Range("B18"))
        End Select
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Erstellung eines Makros
05.01.2021 14:18:01
Stockl
Das sieht für mich gut aus. Probiere es heute Abend aus und melde mich dann Morgen.
Bis dahin erst einmal Danke.
Gruss Stockl
AW: Erstellung eines Makros
05.01.2021 19:25:06
Stockl
Hallo,
habe eine kurze Pause und habe unter
https://www.herber.de/bbs/user/142787.doc
den Code für die ersten 10 Arbeitsblätter umgebaut.
Wollte mein Projekt einmal hochladen aber es ist zu groß. Es ist fast 9MB groß.
Somit habe ich es einmal in Word geschrieben und es unter der Datei
https://www.herber.de/bbs/user/142788.doc
gespeichert. Das war das Anschreiben für ein anderes Forum.
Vielleicht kannst du damit etwas anfangen.
Natürlich brauche ich dann beim einfügen des Makros auch noch Hilfe. Es wäre prima wenn du mir dabei helfen könntest.
Danke und erst einmal einen schönen Abend.
Gruss Stockl
Anzeige
AW: Erstellung eines Makros
05.01.2021 19:33:17
Nepumuk
Hallo Stockl,
wozu mehrmals den selben Code? Wenn du immer in das aktuelle Monatsblatt kopieren willst, dann ändere:
ThisWorkbook.Worksheets("1").Range("B18")
in:
ThisWorkbook.Worksheets(CStr(Month(Date))).Range("B18")
Gruß
Nepumuk
AW: Erstellung eines Makros
06.01.2021 07:55:40
Stockl
Guten Morgen,
konntest du dir einmal die Seite
https://www.herber.de/bbs/user/142788.doc
anschauen?
Vielleicht einfach zur Erklärung:
Die Arbeitsmappe besteht aus knapp 200 Arbeitsblätter.
Davon sind 170 Arbeitsblätter (grün markiert von 1-170) im Bild sind davon 30 Arbeitsblätter zusehen. Das sind die Dienstpläne der einzelnen Kollegen welche in verschiedenen Schichten arbeiten.
Dann gibt es das Arbeitsblatt „Namen“, da sind alle Kollegen erfasst, einer Dienstschicht (A-E) und dem persönlichen Dienstplan zugeordnet.
Dann gibt es das Arbeitsblatt „Dienstzyklus“ darin ist der Jahres-Dienstplan beschrieben (monatlich, in 12 Tabellen).
Aus diesem Grund habe ich angefangen das Makro zu kopieren um es einmal auszuprobieren.
Ich muss ja alle 170 Kollegen erfassen, das ist von D3 bis D172 und in den dazugehörigen persönlichen Dienstplan 1-170 schreiben lassen.
Ist das nicht so richtig?
Gruss Stockl
Anzeige
AW: Erstellung eines Makros
05.01.2021 20:41:24
Werner
Hallo,
den entsprechenden Code habe ich dir bereits um 14:22 geschickt.
Vom Ausprobieren scheinst du nicht viel zu halten.
Gruß Werner
AW: Erstellung eines Makros
06.01.2021 07:47:01
Stockl
Guten Morgen,
und entschuldige, aber ich hatte geschrieben, dass ich fast keine Ahnung vom VBA habe.
Danke für den Vorschlag. Ich habe ihn mit dem vom Nepumuk verglichen und sah, dass es für mich nicht nachvollziehbar war. Ich war hier stecken geblieben.
For Each ws In ThisWorkbook.Worksheets
If ws.Name = CStr(Month(Date)) Then
With ws
boVorhanden = True
Kann es aber auch nicht lesen. Für mich fehlte der Bezug wo die Daten herkommen „Dienstzyklus“. Der Rest konnte ich nachvollziehen.
Für mich war das von Nepumuk überschaubarer.
Ich hatte schon in ein anderes Forum gefragt und bekam keine Antwort. Diese Anfrage hatte ich zur Ansicht hochgeladen unter:
https://www.herber.de/bbs/user/142788.doc
Ich wollte auch mein Projekt laden aber es ist zu groß (knapp 9MB).
Vielleicht noch einmal zur Erklärung:
Die Arbeitsmappe besteht aus knapp 200 Arbeitsblätter.
Davon sind 170 Arbeitsblätter (grün markiert von 1-170) im Bild sind davon 30 Arbeitsblätter zusehen. Das sind die Dienstpläne der einzelnen Kollegen welche in verschiedenen Schichten arbeiten.
Dann gibt es das Arbeitsblatt „Namen“, da sind alle Kollegen erfasst, einer Dienstschicht (A-E) und dem persönlichen Dienstplan (1-170) zugeordnet.
Dann gibt es das Arbeitsblatt „Dienstzyklus“ darin ist der Jahres-Dienstplan beschrieben (monatlich, in 12 Tabellen).
Mein Ziel ist es:
Wenn Arbeitsblatt „Name“ in D3 = „A“ steht dann aus „Dienstzyklus“ die Zeile „B6“ bis „AF6“ in das Arbeitsblatt „1“ in „B18“ bis „AF18“ kopieren, wenn nicht dann nichts.
D3 = erste Zuordnung und D172 = die letzte Zuordnung
Somit bin ich mit dem Vorschlag von Nepumuk
With ThisWorkbook.Worksheets("Dienstzyklus")
besser zurechtgekommen weil ich den Verweis auf „Dienstzyklus“ gefunden habe.
Dann ist mein Ansinnen das Makro von D3 zu kopieren bis D172 und dann laufen zu lassen damit alle Dienstpläne beschrieben werden.
Gruß Stockl
Anzeige
AW: Erstellung eines Makros
05.01.2021 12:49:44
Werner
Hallo,
kopiere das Makro ins Codemodul von Tabellenblatt "Name"
Rechtsklick auf den Tabellenblattreiter - Code anzeigen - Code rechts ins Codefenster kopieren.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "D3" Then
Select Case Target.Value
Case "A"
Worksheets("1").Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B6:AF6"). _
Value
Case "B"
Worksheets("1").Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B8:AF8"). _
Value
Case "C"
Worksheets("1").Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B10:AF10") _
.Value
Case "D"
Worksheets("1").Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B12:AF12") _
.Value
Case "E"
Worksheets("1").Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B14:AF14") _
.Value
Case ""
Worksheets("1").Range("B8:AF8") = ""
Case Else
End Select
End If
End Sub
Der Code startet automatisch, sobald im Blatt "Name" in D3 der entsprechende Wert eingetragen wird.
Gruß Werner
Anzeige
AW: Erstellung eines Makros
05.01.2021 14:08:18
Stockl
Hallo Werner, es handelt sich um einen Schichtplan. Das Blatt "Name" ist gefüllt mit Namen und da der Monat wechselt und somit immer neue Schichten fällig werden soll das Makro per Butten ausgelöst werden.
Gruss Stockl
AW: Erstellung eines Makros
05.01.2021 14:22:48
Werner
Hallo,
ein paar Infos dazu wären nicht schlecht. Ich gehe davon aus, dass du für jeden Monat ein eigenes Tabellenblatt hast, benannt von 1 bis 12.
Public Sub Schicht()
Dim ws As Worksheet, boVorhanden As Boolean
For Each ws In ThisWorkbook.Worksheets
If ws.Name = CStr(Month(Date)) Then
With ws
boVorhanden = True
Select Case Worksheets("Name").Range("D3").Value
Case "A"
.Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B6:AF6").Value
Case "B"
.Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B8:AF8").Value
Case "C"
.Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B10:AF10").Value
Case "D"
.Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B12:AF12").Value
Case "E"
.Range("B8:AF8").Value = Worksheets("Dienstzyklus").Range("B14:AF14").Value
Case ""
.Range("B8:AF8") = ""
Case Else
End Select
Exit For
End With
End If
Next ws
If Not boVorhanden Then
MsgBox "Fehler: Das Tabellenblatt für den aktuellen Monat existiert nicht." & vbLf & vbLf _
& "Bitte das Blatt erst anlegen."
End If
End Sub
Gruß Werner
Anzeige
AW: Erstellung eines Makros
05.01.2021 14:33:46
Stockl
Hallo Werner, ich habe jetzt Beratung. Werde Morgen einmal was hochladen für eine bessere Erklärung. Danke bis dahin ersteinmal.
Gruss Stockl
AW: Erstellung eines Makros
06.01.2021 12:23:37
Stockl
Hallo Werner,
habe es probiert und es funzelt nicht.
Laufzeitfehler "9"
bei
Select Case Worksheets("Name").Range("D3").Value
AW: Erstellung eines Makros
07.01.2021 08:51:45
Werner
Hallo,
das Blatt "Name" gibt es in deiner Datei nicht. Das hattest du in deinem Eingangsbeitrag so geschrieben, tatsächlich heißt das Blatt aber bei dir wohl "Namen".
Aber funktionieren wird es wohl nicht. Ich hatte dir geschrieben, dass ich davon ausgehe, dass du zwölf Monatsblätter hast, benann von 1 bis 12. Das ist ja wohl nicht der Fall. Stattdessen hast du wohl irgendwelche Blätter von 1 bis keine Ahnung.
Ohne deine Datei wird das nichts. Und kein Mensch braucht eine Datei mit mehreren MB. Lösch mal die ganzen Blätter 1 bis ? bis auf zwei oder drei.
Dann schreibst du auch noch was von "Monatsblättern". Da auch alle bis auf zwei oder drei löschen.
Alle anderen möglicherweise noch vorhandenen Blätter, die im Zusammenhang mit dem Makro nicht benötigt werden, ebenfalls löschen.
Was gebraucht wird sind natürlich die Blätter "Namen" und "Dienstzyklus"
Diese Datei dann hier hochladen.
Und bitte beschreib noch mal, was das Makro genau machen soll.
Ich befinde mich im Blatt "xxx" klicke dort auf den Button dann soll aus dem Blatt "yyy" der Bereich "zzz" ins Blatt "aaa" in den Bereich "bbb" kopiert werden.
Gruß Werner
Anzeige
AW: Erstellung eines Makros
05.01.2021 13:58:14
Rudi
Hallo,
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If Target.Address = "$D$3" Then
Range("B18").Resize(, 31).ClearContents
x = InStr("  ABCDE", Target)
If x  0 Then
Sheets("Dienstplan").Cells(x * 2, 2).Resize(, 31).Copy Sheets("1").Range("B18")
End If
End If
End Sub
Gruß
Rudi
AW: Erstellung eines Makros
05.01.2021 14:14:29
Stockl
Hallo Rudi Maintaire, nun bin ich überfordert. Werde es ausprobieren und mich wieder melden.
Ich kann dabei aber nicht sehen woher was genommen wird. Und es handel sich ja dabei von A, B, C, D, E um verschiedene Werte die das Makro ausführen soll.
Gruss Stockl
AW: Erstellung eines Makros
06.01.2021 15:30:15
Rudi
Hallo,
geht die Liste in 'Namen' durch und kopiert den entsprechenden Diensplan in das zugeordnete Blatt:
Sub kopieren()
Dim lRow As Long, lRow2 As Long
Application.ScreenUpdating = False
With Sheets("Namen")
For lRow = 3 To .Cells(Rows.Count, 2).End(xlUp).Row
Select Case .Cells(lRow, 4)
Case "A":  lRow2 = 6
Case "B":  lRow2 = 8
Case "C":  lRow2 = 10
Case "D":  lRow2 = 12
Case "E":  lRow2 = 14
Case Else: lRow2 = 0
End Select
If lRow2  0 Then
Sheets("Dienstzyklus").Cells(lRow2, 2).Resize(, 2).Copy Sheets(.Cells(lRow, 1)).Cells( _
18, 2)
End If
Next lRow
End With
End Sub

Gruß
Rudi
und noch als Formel
06.01.2021 15:46:56
Rudi
Hallo,
den Name im Dienstplan (1...170) in B2, wie auf Blatt Namen:
B18:AF18
=INDEX(Dienstzyklus!$B6:$AF14;FINDEN(SVERWEIS($B$2;Namen!$B:$D;3;);"ABCDE")*2-1;SPALTE(A$1))&""
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige