Nach kopieren einer Tabelle, Makro löschen
Erst einmal wüsche ich allen Mitgliedern hier im Forum eine Frohe Weihnacht. Ich hoffe ich mache alles richtig, denn dies ist mein erster Eintrag in diesem Forum.
Ich nutze einen Code welchen ich nicht selber erstellt habe, welchen ich aber gerne auf meine
Bedürfnisse anpassen würde.
Um folgenden Code dreht sich meine Frage:
Private Sub CommandButton1_Click()
Dim strDateiName As String
Dim strVerzeichnisPfad As String
Dim strSaveDatei As String
Dim bSpeichernDialog As Boolean
Dim bSpeichern As Boolean
bSpeichern = False
Application.DisplayAlerts = False
'Wert True = es wird defintiv gespeichert. False = nichts Speichern
'------------------------------------------------------------------------
'Festlegen ob der Speichern unter Dialog (GetSaveAsFileName) überhaupt aufgerufen werden soll
'Wert auf Flase setzen wenn dies nicht gewünscht wird. Kann auch durch eine Zellabfrage (0 oder 1) erfolgen
'dann bSpeichernDialog = Range("X1") wobei eine 0 Falsch und alles andere Wahr bedeutet. Ansonsten hier Manuell festlegen
bSpeichernDialog = Range("BZ1")
'bSpeichernDialog = False
'------------------------------------------------------------------------
'Verzeichnispfad Vorschlag festlegen
strVerzeichnisPfad = "E:\"
'Dateiname aus Zelle F4 des aktuellen Blatts holen und Datum (Sortierbar) und Dateierweiterung dranhängen. Die yyymmdd ist bei sortierung richtig
strDateiName = Range("AC4") & ("_") & Range("T9") & Format(Date, "_yyyy_mm_dd") & ".xlsm"
'Speicherpfad und Dateiname zusammenfügen
strSaveDatei = strVerzeichnisPfad & strDateiName
'------------------------------------------------------------------------
'Mit dem jetzt vorhandenen Dateiname inkl. Pfad abfragen ob der Speicherort OK ist.
'Dazu das Dialogfenster GetSaveAsFilename aufrufen (Achtung, mus Zwingend Bestätigt werden
'Dies aber nur falls der Dialog abgefragt werden soll. bSpeicherDialog regelt dies über Wahr / Unwahr
If bSpeichernDialog Then
'Dialog zum bestätigen des Speicherorts und Datename aufrufen. Achtung, kann auch mit Abbrechen beendet werden
'Zuweisen des endgültigen Dateinamens oder ein Falsch wenn abbruch
strSaveDatei = SpeichernUnter(strSaveDatei)
'Wurde abgebrochen?
If strSaveDatei = "Falsch" Then
'Es wurde im Speicherdialog auf Abbrechen geklickt. Nichts zu tun und Tschüß
bSpeichern = False
'Exit Sub
'Mit Exit Sub kann hier die gesamte restliche SUB beendet werden. Unschön, aber manchmal nötig
Else
'Im Dialog wurde auf Speichern geklickt
bSpeichern = True
End If
Else
'Der Dialog sollte nicht aufgerufen werden, also wird der DateiPfad und Name als gegeben und nicht änderbar angenommen.
bSpeichern = True
End If
'------------------------------------------------------------------------
'Bestimmen ob dies eine Neue datei oder eine schon vorhandene ist.
'Falls neu, das .SaveAs verwenden. Wen die Datei schon vorhanden ist, wird zwingend ein Dialog wegen überschreibung eingeblendet
'daher falls die Datei schon vorhanden ist, das .Save verwenden was einen Überschreiben Dialog nicht aufruft
Do While bSpeichern
If DateiVorhanden(strSaveDatei) Then
'Datei wird überschrieben OHNE Dialog
ActiveWorkbook.Save
Else
'Datei wird erstmalig erstellt Ohne Dialog
ActiveWorkbook.SaveAs strSaveDatei
End If
bSpeichern = False
Loop
Ich möchte erreichen das die neu erzeugte Mappe keine Makros mehr enthält. Der einfache Weg, unter .xlsx zu speichern
funktioniert nicht. Stelle ich den Code auf .xlsx um folgen Fehlermeldungen.
Gibt es die Möglichkeit, das nach dem erzeugen der neuen Datei, die Makros aus dieser gelöscht werden?
Es wäre ein tolles Weihnachtsgeschenk wenn ihr mir helfen könnt.
Dank schon einmal für eure Mühe.
Gruß Asterix2
Ich nutze einen Code welchen ich nicht selber erstellt habe, welchen ich aber gerne auf meine
Bedürfnisse anpassen würde.
Um folgenden Code dreht sich meine Frage:
Private Sub CommandButton1_Click()
Dim strDateiName As String
Dim strVerzeichnisPfad As String
Dim strSaveDatei As String
Dim bSpeichernDialog As Boolean
Dim bSpeichern As Boolean
bSpeichern = False
Application.DisplayAlerts = False
'Wert True = es wird defintiv gespeichert. False = nichts Speichern
'------------------------------------------------------------------------
'Festlegen ob der Speichern unter Dialog (GetSaveAsFileName) überhaupt aufgerufen werden soll
'Wert auf Flase setzen wenn dies nicht gewünscht wird. Kann auch durch eine Zellabfrage (0 oder 1) erfolgen
'dann bSpeichernDialog = Range("X1") wobei eine 0 Falsch und alles andere Wahr bedeutet. Ansonsten hier Manuell festlegen
bSpeichernDialog = Range("BZ1")
'bSpeichernDialog = False
'------------------------------------------------------------------------
'Verzeichnispfad Vorschlag festlegen
strVerzeichnisPfad = "E:\"
'Dateiname aus Zelle F4 des aktuellen Blatts holen und Datum (Sortierbar) und Dateierweiterung dranhängen. Die yyymmdd ist bei sortierung richtig
strDateiName = Range("AC4") & ("_") & Range("T9") & Format(Date, "_yyyy_mm_dd") & ".xlsm"
'Speicherpfad und Dateiname zusammenfügen
strSaveDatei = strVerzeichnisPfad & strDateiName
'------------------------------------------------------------------------
'Mit dem jetzt vorhandenen Dateiname inkl. Pfad abfragen ob der Speicherort OK ist.
'Dazu das Dialogfenster GetSaveAsFilename aufrufen (Achtung, mus Zwingend Bestätigt werden
'Dies aber nur falls der Dialog abgefragt werden soll. bSpeicherDialog regelt dies über Wahr / Unwahr
If bSpeichernDialog Then
'Dialog zum bestätigen des Speicherorts und Datename aufrufen. Achtung, kann auch mit Abbrechen beendet werden
'Zuweisen des endgültigen Dateinamens oder ein Falsch wenn abbruch
strSaveDatei = SpeichernUnter(strSaveDatei)
'Wurde abgebrochen?
If strSaveDatei = "Falsch" Then
'Es wurde im Speicherdialog auf Abbrechen geklickt. Nichts zu tun und Tschüß
bSpeichern = False
'Exit Sub
'Mit Exit Sub kann hier die gesamte restliche SUB beendet werden. Unschön, aber manchmal nötig
Else
'Im Dialog wurde auf Speichern geklickt
bSpeichern = True
End If
Else
'Der Dialog sollte nicht aufgerufen werden, also wird der DateiPfad und Name als gegeben und nicht änderbar angenommen.
bSpeichern = True
End If
'------------------------------------------------------------------------
'Bestimmen ob dies eine Neue datei oder eine schon vorhandene ist.
'Falls neu, das .SaveAs verwenden. Wen die Datei schon vorhanden ist, wird zwingend ein Dialog wegen überschreibung eingeblendet
'daher falls die Datei schon vorhanden ist, das .Save verwenden was einen Überschreiben Dialog nicht aufruft
Do While bSpeichern
If DateiVorhanden(strSaveDatei) Then
'Datei wird überschrieben OHNE Dialog
ActiveWorkbook.Save
Else
'Datei wird erstmalig erstellt Ohne Dialog
ActiveWorkbook.SaveAs strSaveDatei
End If
bSpeichern = False
Loop
Ich möchte erreichen das die neu erzeugte Mappe keine Makros mehr enthält. Der einfache Weg, unter .xlsx zu speichern
funktioniert nicht. Stelle ich den Code auf .xlsx um folgen Fehlermeldungen.
Gibt es die Möglichkeit, das nach dem erzeugen der neuen Datei, die Makros aus dieser gelöscht werden?
Es wäre ein tolles Weihnachtsgeschenk wenn ihr mir helfen könnt.
Dank schon einmal für eure Mühe.
Gruß Asterix2
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 196219
Url: https://administrator.de/forum/nach-kopieren-einer-tabelle-makro-loeschen-196219.html
Ausgedruckt am: 22.04.2025 um 15:04 Uhr
4 Kommentare
Neuester Kommentar

Hallo Asterix2!
Theoretisch kann man Makros über VBE-Project löschen, allerdings bekomme ich seit Win7 und keinen Zugriff mehr auf VBE-Project und keine Ahnung warum?
Aber ich würde es eh anders machen und zwar in etwa so:
Im Sheet einen Symbolleiste-Formular-Button
Den Sheet-Code in ein Modul (Public Sub) setzen und den Formular Button damit Verknüpfen
Nicht das Workbook speichern, sondern das/die Sheets per Sheets.Copy in eine neue Arbeitsmappe einfügen
Alle Shapes (Buttons) im Active Workbook in Sheet XY (ActiveSheet?) löschen, speichern und schließen
Das Makro-Workbook nicht speichern (.Close False). Wobei, wenn Du die Makro-Datei bearbeiten willst, könntest Du am einfachsten beim Öffnen der Makro-Vorlage eine MsgBox-Abfrage nach dem Motto '... im Edit-Modus öffnen?' Ja/Nein machen und Deinen Save-Parameter damit auf True/False setzen...
Gruß Dieter
Theoretisch kann man Makros über VBE-Project löschen, allerdings bekomme ich seit Win7 und keinen Zugriff mehr auf VBE-Project und keine Ahnung warum?
Aber ich würde es eh anders machen und zwar in etwa so:
Im Sheet einen Symbolleiste-Formular-Button
Den Sheet-Code in ein Modul (Public Sub) setzen und den Formular Button damit Verknüpfen
Nicht das Workbook speichern, sondern das/die Sheets per Sheets.Copy in eine neue Arbeitsmappe einfügen
Alle Shapes (Buttons) im Active Workbook in Sheet XY (ActiveSheet?) löschen, speichern und schließen
Das Makro-Workbook nicht speichern (.Close False). Wobei, wenn Du die Makro-Datei bearbeiten willst, könntest Du am einfachsten beim Öffnen der Makro-Vorlage eine MsgBox-Abfrage nach dem Motto '... im Edit-Modus öffnen?' Ja/Nein machen und Deinen Save-Parameter damit auf True/False setzen...
Gruß Dieter

Hallo Asterix2!
Na, dann versuch's doch, indem Du den Code in ein Modul kopierst und wenn alles gelöscht werden soll, an entsprechender Stelle die Sub 'Alles_Löschen' aufrufst...
In etwa so (erst mit einer Kopie testen):
Gruß Dieter
Na, dann versuch's doch, indem Du den Code in ein Modul kopierst und wenn alles gelöscht werden soll, an entsprechender Stelle die Sub 'Alles_Löschen' aufrufst...
In etwa so (erst mit einer Kopie testen):
Do While bSpeichern
If DateiVorhanden(strSaveDatei) Then
'Datei wird überschrieben OHNE Dialog
Call Alles_Löschen
ActiveWorkbook.Save
Else
'Datei wird erstmalig erstellt Ohne Dialog
Call Alles_Löschen
ActiveWorkbook.SaveAs strSaveDatei
End If
bSpeichern = False
Loop
Gruß Dieter