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