In Excel Makros aus aktiven Sheet löschen?
Ich Möchte ein Tabellenblatt neben das Original kopieren, in dem man nichts mehr ändern kann, aber anschliesssend die Sub Makros aus der Kopie Löschen, da sonnst die Datie zu groß wird. Das Kopieren funktioniert super, nur mit den Makros entfernen noch nicht so.
Das ist mein Code zum Kopieren, Danke
Sub NeuesTabBlatt()
' Monate Soll
If MsgBox("Wollen Sie wirklich einen neuen Sollplan erstellen?", vbYesNo) = vbYes Then
If InputBox("geben sie Bitte das Passwort zum Entsperren ein", " Sollplanerstellung") = "1234" Then
MsgBox "OK, der Sollplan wird erstellt"
Else
MsgBox "Hier kommst Du net rein!"
ActiveSheet.Range("$A$1").Select
Exit Sub
End If
Application.ScreenUpdating = False
Application.Calculation = False
Dim NewName As String
ActiveWorkbook.Unprotect Password:="1234"
NewName = ActiveSheet.Range("$CW$1")
ActiveSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "Soll" & " " & ActiveSheet.Range("CW1")
ActiveSheet.Range("AT127:AV134,AQ133:AS133, AT183:AV186, AT228:AV232").Clear
ZeilenEinUndAusblenden
ActiveSheet.EnableSelection = xlNoSelection
ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.Visible = False
ActiveWorkbook.Protect "1234", Structure:=True
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
MsgBox "ein neues SOLL Tabellenblatt wurde erstellt"
End If
'BlätterSollEinAus
ActiveSheet.Range("$A$1").Select
End Sub
2 Antworten
Entferne das Makro vom Tabellenblatt selbst und packe es in ein Modul.
Dann rufe das Makro nur auf wenn es das neue Tabellenblatt braucht. ggf über eine Tastenkombination, oder zufügen im Menu, oder einem separaten Knopf irgendwo.
..
Hier wird erklärt wie man per Code Module löschen kann.
per VBA alle Module löschen (office-hilfe.com)
Ob dies analog auch Code anwendbar ist, der sich "am Blatt" befindet, gilt es zu testen.
mmhh. Einfach per Makro Code löschen, oder das Verschieben des bisherigen Code in ein Modul ? Letzteres hat keinen Einfluss auf anderen Code.
Ich habe ein Dienstplan erstellt, und Da wird immer ein Sollplan gespeichert, der nicht verändert werden darf. Am anfang des Jahres ist der Plan ca 4,5 Mb groß und am ende des Jahres 11Mb. Das ist sehr viel, und ich weis nicht, ob mir das der Server und die Admins mal übel nehmen. einfach per Makro löschen währe glaube ich die beste lösung. Ich kenne aber nur eine, die alle Macros löscht, und nicht nur die im aktuellen sheet
Wenn sie euch dies mit Excel machen lassen anstatt einem Tool dass dafür geeignet ist selbst Schuld. ABER.
Dein Code der dann ins Modul verschoben ist. Wird dabei NIE MEHR verdoppeln.
Sondern NUR deine Vorlagen Seite, dies sich im Hintergrund befindet für einen weiteren Monat vervielfältigt und sichtbar.
..ist auch eine Lösung, die ich für diverse Excel Lösungen umgesetzt habe.
11MB ist am Ende auch nicht wirklich "groß".
Meine schlimmste Excel hat ~320MByte. (Macht aber auch keinen Spaß mehr, diese zu verwenden.)
Kannst du mir da ein bischen auf die Sprünge helfen, wie ich das anstellen kann
Zunächst den Code, der sich am Blatt befindet:
in ein Modul verschieben
Hierfür im Projekt Explorer "rechte maus" klicken und "Modul Einfügen" wählen.
Dann den Code per Strg+x aus der tabelle herauskopieren und im Modul pasten
Anschließend könntest du auf deiner Vorlage einen Knopf anbringen.
Dies ist ein abgerundetes Rechteck, das man zum "knopf" umgestallten kann, um dann letztlich auch DEIN Makro zuzuweisen.
Ist dieser Knopf auf deiner Vorlage vorhanden wird NUR der Knopf ebenfalls kopiert. Diesen kannst du dann anschließend auf dem neuen Blatt löschen.
ABER hierbei ACHTUNG, dass du das MAKRO NICHT erneut auslöst.
Also mit rechter Maus markieren und entfern drücken.
(Oder per VBA Code, diesen button (ist ein Shape) löschen.)



Ok, das werde ich versuchen, wird wohl ne weile dauern, bis ich dir schreiben kann ob es funktioniert. Ich habe mir das einfacher vor gestellt.
Ich Danke dir für deine Bemühungen
Es ist "einfach". Dein Code existiert ja schon. Er wird nur im einem Modul ausgeführt. ..nicht vom ungewohnten irritieren lassen. Viel Erfolg
Das geht glaube nicht so einfach, da ich einige
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
und
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
verbaut habe