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

Schleife zur Auswahl des Makros

Schleife zur Auswahl des Makros
01.09.2022 10:29:31
b0r0
Hallo,
ich steh gerade vor einem kleinen Problem, das etwas zu kompliziert für mich wird.
Ich bräuchte eine Schleife, die im Tabellenblatt "Raumconfig" die Zellen C2 bis C157 abläuft, und je nach Wert in der Zelle ein unterschiedliches Makro ausführt.
Die Makros an sich funktionieren schon, aber es würde mir eine Menge Arbeit abnehmen, wenn das mit der Schleife klappen würde.
Die auszuführenden Makros heißen z.B. "Vorlage1", "Vorlage2", "Vorlage3", usw. und wenn in der Zelle C2 der Wert 1 steht, dann soll das Makro "Vorlage1" ausgeführt werden.
Außerdem müsste ich in den Vorlagemakros noch eine Funktion ergänzen, wo ich mir auch noch nicht ganz sicher bin, wie das geht.
Wenn die Schleife gerade bei C2 ist, und die "Vorlage1" ausführt, dann soll noch der Wert aus A2 in eine Zelle eingefügt werden.
(Die Vorlagemakros kopieren mir Vorlagen in eine andere Mappe, in dieser muss dann nur noch die Raumnummer eingetragen werden und alle restlichen Informationen werden aus dem "Raumconfig" nachgezogen)
Wär echt klasse, wenn mich jemand unterstützen könnte
Danke!
Gruß,
Sebastian

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife zur Auswahl des Makros
01.09.2022 10:41:01
Daniel
Hi
wenn sichergestellt ist, dass nur nummern in den Zellen stehen, für die es auch Makros gibt, dann.

dim Zelle as Range
for each Zelle in Sheets("Raumconfig").Range("C2:C157")
Range("unbekannte Zelle").Value = Zelle.Offset(0, -2).value
Application.Run "Vorlage" & Zelle.value
next
die Frage wäre, wie ähnlich sind die einzelnen Vorlage-Makros.
Wenn sich die Codes nur wenig unterscheiden, wäre es vielleicht sinnvoller, nur ein Makro zu erstellen und den Wert aus C und A als Parameter zu übergeben.
Gruß Daniel
AW: Schleife zur Auswahl des Makros
01.09.2022 11:03:48
b0r0
Danke für die schnelle Antwort.
Das funktioniert schon fast so, wie ich das brauche.
Mein "Generate" Makro sieht jetzt so aus, erstmal nur C2:C4 zum testen.

Sub Generate()
Dim Zelle As Range
Windows("Selects.xlsm").Activate
For Each Zelle In Sheets("Raumconfig").Range("C2:C4")
Application.Run "Vorlage" & Zelle.Value
Next
End Sub
Den Raumnamen reinzukopieren funktioniert noch nicht so ganz.
Dein Code ändert mir den Raumnamen in der Vorlage, aber geändert werden soll er erst in der Kopie auf der neuen Mappe.
Hier mal ein Beispiel eines Vorlagemakros:

Sub Vorlage1()
Windows("Räume_Pflichtenheft.xlsm").Activate
Dim sh_count
sh_count = Sheets.count - 1
Windows("Selects.xlsm").Activate
Sheets("(1) 1-Bett-Zimmer außen").Select
Sheets("(1) 1-Bett-Zimmer außen").Copy After:=Workbooks( _
"Räume_Pflichtenheft.xlsm").Sheets(sh_count)
Range("B5").Value = Zelle.Offset(0, -2).Value
Windows("Selects.xlsm").Activate
Sheets("Raumconfig").Select
Windows("Räume_Pflichtenheft.xlsm").Activate
End Sub
Ich hab hier die Benennung des Raumnamens eingefügt, aber in dieser Zeile bekomm ich einen "Laufzeitfehler '424' Objekt erforderlich.
Kann ich die "Zelle.Offset(0,-2).Value in diesem Vorlagemakro verfügbar machen?
Übrigens: ja nur ein Makro und Parameter wäre eine gute Idee gewesen, aber das übersteigt mein VBA Können.
Ich sollte noch erwähnen, der Tabellenname der Vorlagen wird durch die Zelle B5 geändert, mit folgendem Code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Range("B5")
If Target = "" Then Exit Sub
Application.ActiveSheet.Name = VBA.Left(Target, 31)
Exit Sub
End Sub
Durch das Generate Makro verändert sich die Zelle B5, aber der Tabellenname wurde nicht angepasst, kann ich das irgendwie im Makro triggern?
Danke!
Anzeige
AW: Schleife zur Auswahl des Makros
01.09.2022 11:42:21
Daniel
Hi
das müsstest du so machen:

Sub Vorlage1(Zimmername as string)
Range("B5").Value = Zimmername
end Sub
und beim Aufruf:

Application.Run "Vorlage" & Zelle.Value, Zelle.Offset(0, -2).Text
noch zwei Tipps:
- verwende Workbooks() statt Windows(). Workbooks ist die Mappe selbst und das eigentliche Objekt, mit dem du arbeiten willst.
Windows ist nur die Anzeige
- vermeide Select und Activates, Refrenziere vollständig.
Ein Activate nur am Schluss, wenn ein bestimmtes Fenster angezeigt werden soll (welches sich aufgrund des Sheets.Copy verändert hat)

Sub Vorlage1()
Dim sh_count
sh_count = Workbooks("Räume_Pflichtenheft.xlsm").Sheets.count - 1
Workbooks("Selects.xlsm"). Sheets("(1) 1-Bett-Zimmer außen").Copy After:=Workbooks( _
"Räume_Pflichtenheft.xlsm").Sheets(sh_count)
Range("B5").Value = Zelle.Offset(0, -2).Value
Windows("Räume_Pflichtenheft.xlsm").Activate
End Sub
aber blöde Frage, ändert sich an den Vorlagemakros irgendwas außer den Blattnamen "(1) - 1-Bettzimmer außen"?
entspricht die Nummer in Klammern (1) der Nummer in der Zelle aus Spalte C?
Wenn ja, solltest du den Wert aus Spalte C ebenfalls übergeben, dann würde dir ein einziges Makro reichen, weil du dann ja das Blatt suchen kannst, das den entsprechenden Typ hat:
wenn also die Nummer in der Zelle der Nummer in der Klammer des Tabellenblattnamens entspricht, reicht dir ein einziges Vorlagenmakro:

Sub Vorlage(Nr As String, ZimmerName As String)
Dim sh_Zimmer As Worksheet
Dim wb_RP As Workbook
Set wb_RP = Workbooks("Räume_Pflichtenheft.xlsm")
For Each sh_Zimmer In Workbooks("Selects.xlsm").Worksheets
If sh_Zimmer.Name Like "(" & Nr & ")*" Then Exit For
Next
If sh_Zimmer Is Nothing Then
MsgBox "Zimmer-NR: " & Nr & " nicht vorhanden!"
Else
sh_Zimmer.Copy after:=wb_RP.Sheets(wb_RP.Sheets.Count - 1)
ActiveSheet.Range("B5").Value = ZimmerName
End If
End Sub
und das makro zum erzeugen:

Sub Generate()
Dim Zelle As Range
Dim AktiveZelle As Range
Set AktiveZelle = ActiveCell
Application.ScreenUpdating = False
For Each Zelle In Workbooks("Selects.xlsm").Sheets("Raumconfig").Range("C2:C4")
If Zelle.Value  "" Then Call Vorlage(Zelle.Value, Zelle.Offset(0, -2).Value)
Next
Application.ScreenUpdating = True
Application.Goto AktiveZelle
End Sub
wobei sich dann die Frage stellt, ob man nicht alles in ein Makro packt.
Gruß Daniel
Anzeige
AW: Schleife zur Auswahl des Makros
01.09.2022 13:41:02
b0r0
Vielen Dank, das hat einwandfrei funktioniert!
Excel spart mir hier jetzt insgesamt sicher 2 Wochen repetitive Arbeit.
Auch danke für die Tipps, mein VBA Wissen begrenzt sich bisher auf Makro aufzeichnen und Code aus Foren kopieren.
Je länger ich mich damit beschäftige, desto erstaunter bin ich immer wieder, wie gut Excel eigentlich ist.
Beste Grüße,
Sebastian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige