Moin Daniel,
ja, dein Namensvetter hat Recht, die beiden Public-Anweisungen gehören ganz oben in ein Modul. Die Reihenfolge der danach folgenden Subs spielt keine Rolle.
Auch mit Option Explizit hat er Recht, je komplexer Makros werden erspart diese Option viel Sucherei weil Variablennamenprobleme sofort angezeigt werden.
Ich lass das meist weg, weil ich ja selten komplette Programme erstelle sondern nur kleinere Routinen austeste.
Wenn du Option Explicit benutzen willst (ist zu empfehlen), einfach im VB-Editor unter Extras–Optionen–Editor ein Häkchen bei Variablendeklaration erforderlich.
Dann erscheint automatisch Option Exlicit in jedem Modul und es erscheinen konkrete Fehlermeldungen bis du alle Variablen deklariert hast.
Deklaration erfolgt mit Dim x as Integer (in der Prozedur), public x as integer(global) usw.
Ansonsten, wenn die beiden Publics korrekt oben stehen und du den 7 Autoformen jeweils das gkleiche Makro „Zeilen_löschen“ zuweist funktioniert das mit „Béarbeiten–Rückgängig.“
Allerdings zerschiesst das dein Bild weil anscheinend beim wiedereinfügene die (stark verkleinerte)Zeilenhöhe von A4 übernommen wird, was dann nicht lesbar aussieht. Dies passiert dann, wenn vorher keine neuen Zeilen mit deinen anderen Autoformen eingefügt wurden.
Dann ist beim löschen die 25.4. zeile weg und kommt verkleinert wieder.
Soll das noch abgefangen werden? Bzw was soll passieren wenn in A5 ein Datum steht, soll dann das zeilen_löschen-Makro nicht löschen?
Noch was, bei deinen anderen Subs, wie gelb_mitte_3 usw, baue doch gleich als erste Zeile Application.ScreenUpdating = False ein und am Ende vor End Sub Application.ScreenUpdating = True, dann ist das Bild ruhiger.
Du kannst die Anzahl der Makros stark reduzieren, wenn du für die ganzen gelb_mitte bzw grün_mitte Subs nicht für 2, 3, 4 usw eigene Makros hast sondern nur eins,was für alle „gelben“ gilt, wie nachfolgend zu sehen für gelb_Mitte, auch da wird wieder die Anzahl aus der Bezeichnung der Autoform gewonnen.
Gruß
Reinhard
Sub gelb\_mitte\_Alle()
Dim Bezeich As String
Dim a As Integer
Application.ScreenUpdating = False
Bezeich = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
'MsgBox Bezeich
a = Val(Bezeich)
ActiveWorkbook.Unprotect
ActiveSheet.Unprotect
Sheets("Baukasten").Visible = True
Sheets("Baukasten").Select
Range("14:" & 14 + a - 1).Select ' geändert
Selection.Copy
Range("H1").Select
Sheets("Baukasten").Visible = False
Sheets("Ergebnisse").Select
Rows("5:" & 5 + a - 1).Select ' geändert
Selection.Insert Shift:=xlDown
Range("A5").Select
ActiveSheet.Protect
ActiveSheet.EnableSelection = xlUnlockedCells
ActiveWorkbook.Protect Structure:=True, Windows:=True
Application.ScreenUpdating = True
End Sub
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]