Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1844to1848
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
Beim speichern VBA Code löschen
08.09.2021 15:37:13
Memo
Hallo zusammen,
ich habe einen Code der eine Makro Datei während speichern die Buttons usw löscht. Das Sheet wird dann als normale .xls datei abgelegt.
Jedoch löscht er nicht die darin enthaltete VBA Codes/Module.
Ist das Löschen von VBA Codes durch VBA während speichern möglich?
Im Netz habe ich zwar ähnliche Themen gefunden, jedoch löschen diese nicht den Codeinhalt während speichern.
Hier mein funktionierender Code:

Private Sub CommandButton3_Click()
Dim varFileName As Variant, objShp As Shape, sh As Object
ChDrive "C"
ChDir "C:/"
varFileName = Application.GetSaveAsFilename(varFileName, "Excel Arbeitsmappe ohne VBA (*.xls),*.xlsx,") ' hier wird bereits als xls xlsx Datei abgespeichert, aber die Codes sind nach Speicherung noch immer in der Datei.
If Not varFileName = False Then
Application.DisplayAlerts = False
For Each sh In Sheets
If Not sh.Name = ActiveSheet.Name Then sh.Delete
Next sh
Application.DisplayAlerts = True
For Each objShp In ActiveSheet.Shapes
If objShp.Type = msoOLEControlObject Then objShp.Delete
Next objShp
ThisWorkbook.SaveAs varFileName, FileFormat:=xlWorkbookNormal
Else
MsgBox "Abgebrochen.."
End If
End Sub
Danke für eure Hinweise.
VG
Memo

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 15:58:55
Daniel
Hi
Wenn du VBA komplett löschen willst, dann speichere als .xlsx.
Das ist das Format, das für den Datenaustausch mit Fremden gedacht ist und daher keine Makros enthält, über die Makroviren eingeschleust werden könnten.
Gruß Daniel
AW: Beim speichern VBA Code löschen
08.09.2021 16:19:29
Memo
Servus Daniel,
danke für dein Hinweis, das habe ich vergessen zu erwähnen.
Wennn ich in dieser Zeile
varFileName = Application.GetSaveAsFilename(varFileName, "Excel Arbeitsmappe ohne VBA (*.xls),*.xlsx,")
in Klammer (*.xlsx) schreibe und dann ausführe, speichert er zwar die Datei als xlsx, aber wenn ich diese dann öffnen möchte bekomme ich die folgende Fehlermeldung:
Die Datei '....' kann von Excel nicht geöffnet werden, da das Dateiformat oder die Dateierweiterung ungültig ist. Überprüfen Sie, ob die Datei beschädigt ist und ob die Dateierweiterung dem Dateiformat entspricht.
In der Excel Optionen im Reiter "Speichern" ist bereits auf ".xlsx" eingestellt.
Eigentlich sind alle Einstellungen korrekt, verstehe die Fehlermeldung nicht.
VG
Memo
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 16:26:47
Memo
Servus Daniel,
danke für dein Hinweis, das habe ich vergessen zu erwähnen.
Wennn ich in dieser Zeile
varFileName = Application.GetSaveAsFilename(varFileName, "Excel Arbeitsmappe ohne VBA (*.xls),*.xlsx,")
in Klammer (*.xlsx) schreibe und dann ausführe, speichert er zwar die Datei als xlsx, aber wenn ich diese dann öffnen möchte bekomme ich die folgende Fehlermeldung:
Die Datei '....' kann von Excel nicht geöffnet werden, da das Dateiformat oder die Dateierweiterung ungültig ist. Überprüfen Sie, ob die Datei beschädigt ist und ob die Dateierweiterung dem Dateiformat entspricht.
In der Excel Optionen im Reiter "Speichern" ist bereits auf ".xlsx" eingestellt.
Eigentlich sind alle Einstellungen korrekt, verstehe die Fehlermeldung nicht.
VG
Memo
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 16:26:54
Memo
Servus Daniel,
danke für dein Hinweis, das habe ich vergessen zu erwähnen.
Wennn ich in dieser Zeile
varFileName = Application.GetSaveAsFilename(varFileName, "Excel Arbeitsmappe ohne VBA (*.xls),*.xlsx,")
in Klammer (*.xlsx) schreibe und dann ausführe, speichert er zwar die Datei als xlsx, aber wenn ich diese dann öffnen möchte bekomme ich die folgende Fehlermeldung:
Die Datei '....' kann von Excel nicht geöffnet werden, da das Dateiformat oder die Dateierweiterung ungültig ist. Überprüfen Sie, ob die Datei beschädigt ist und ob die Dateierweiterung dem Dateiformat entspricht.
In der Excel Optionen im Reiter "Speichern" ist bereits auf ".xlsx" eingestellt.
Eigentlich sind alle Einstellungen korrekt, verstehe die Fehlermeldung nicht.
VG
Memo
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 16:27:01
peterk
Hallo
Verwende xlWorkbookDefault
xlWorkbookNormal speichert im XLS Format (auch wenn Du deinen File XLSX nennst)!
Peter
AW: Beim speichern VBA Code löschen
08.09.2021 16:47:51
Memo
Hi Peter,
danke für dein Tipp.
Das hat mich zumindest einen Schritt weitergebracht und die Datei wird nach Ausführen des Makros als "Datei ohne Makro" gespeichert.
Wenn ich jedoch dann in diese Datei reinschaue, also in die VBA Quellcodeumfeld, dann sehe ich noch die Module mit den Codes.
Kann das nicht per vba gelöscht werden, oder muss ich die Module dann jedesmal manuell löschen?
Gruß
Memo
AW: Beim speichern VBA Code löschen
08.09.2021 16:55:28
Memo
Nachtrag:
Eine alternative Lösung wäre noch...
..dass im selben Speichern unter Code, durch ein Zusatz das Makro den aktuellen Arbeitsblatt in eine neue Excel Datei öffnet rein kopiert und dann zum speichern freigibt.
VG
Memo
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 17:04:16
Nepumuk
Hallo Memo,
so:

ThisWorkbook.SaveAs varFileName, FileFormat:=xlOpenXMLWorkbook
Gruß
Nepumuk
AW: Beim speichern VBA Code löschen
08.09.2021 17:40:54
Memo
Hallo Nepumuk,
vielen Dank, funktioniert tadellos.
VG,
Memo
AW: Beim speichern VBA Code löschen
08.09.2021 17:03:34
volti
Hallo Memo,
in einer XLSX-Datei dürfte kein Code mehr drin sein. Das ist die einfachste und sicherste Variante.
Aber hier zu Deiner Frage hier mal eine Idee zur Anschauung, wie Du VBA-Code entfernen kannst.
Das muss natürlich als letztes vor allen durchzuführenden Aktionen sein, denn danach läuft nichts mehr.
PS: "Zugriff auf das VBA_Projektmodell vertrauen" unter Makroeinstellungen im Trustcenter muss angehakt sein.
Code:

[Cc]

Sub CodeEntfernen() Dim VBComp As Object If MsgBox("Soll jetzt wirklich der gesamte Code entfernt werden?", vbQuestion Or vbYesNo, _ "Code entfernen") <> vbYes Then Exit Sub For Each VBComp In ThisWorkbook.VBProject.VBComponents If VBComp.Type = 1 Then 'Type: 1=Modul, 3=Formular, 100=DieseArbeitsmappe bzw. Tabelle If VBComp.Name <> "Modul1" Then ' Dieses Modul ausnehmen VBComp.CodeModule.DeleteLines StartLine:=1, Count:=VBComp.CodeModule.CountOfLines End If End If Next End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 17:47:47
Memo
Hallo Karl-Heinz,
ich habe zwar mein Ziel erreicht, jedoch interessiert mich deine Variante auch sehr.
Was ich nicht verstehe:
"Das muss natürlich als letztes vor allen durchzuführenden Aktionen sein, denn danach läuft nichts mehr"
Wahrscheinlich meinst du, als letztes auszuführender Code.
Denn wenn ich dieses vor allen ausführe, dann gibts nichts mehr auszuführen :) ..habe ja noch andere Prozesse/Makros die auszuführen sind.
Kommt dein Code in eine eigenständige Modul oder in die Arbeitsmappe?
Die Einstellungen ...TrustCenter vertrauen werde ich auch noch vornehmen und dein Code testen wollen.
...man lernt nie aus
Gruß
Memo
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 20:10:40
volti
Hallo Memo,
den Code kannst Du in ein normales Modul setzen, da kann er sich auch selbst weglöschen oder auch z.B. in DieseArbeitsmappe in einer Event-Sub.
Das Beispiel ist eingeschränkt und löscht nur Code aus Modulen die nicht "Modul1" heißen. Die Module bleiben erhalten.
Hier noch ein Beispiel bei dem alle Module komplett entfernt werden.
Viel Spaß beim Testen...
Code:

[Cc]

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' Löscht alle Module Dim VBComp As Object If MsgBox("Sollen alle Codemodule entfernt werden?", vbQuestion Or vbYesNo, _ "Code entfernen") <> vbYes Then Exit Sub With ThisWorkbook.VBProject For Each VBComp In .VBComponents If VBComp.Type = 1 Then 'Type: 1=Modul, 3=Formular, 100=DieseArbeitsmappe/Tabelle .VBComponents.Remove .VBComponents(VBComp.Name) End If Next End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 17:34:06
Daniel
Wann hast du die Datei angeschaut?
In der Datei, die du ohne Makros gespeichert hast, bleiben die Makros erstmal drin.
Das löschen der Makros geschieht beim Schreiben auf das Verzeichnis, die Datei in deinem Ordner bleibt erstmal unverändert.
Du müsstest also die Datei schließen und die als xlsx gespeicherte Datei neu öffnen, um die Veränderung zu sehen.
Außerdem musst du hierfür den Dateityp angeben, so wie von Nepumuk gezeigt.
Den Speichernamen ändern bringt nicht, das ist wie bei einer Geschlechtsumwandlung, nur den Namen ändern bringt nichts, da muss man tiefer eingreifen.
Man sollte sogar beim Speichern unter den Typkürzel im Namen sogar ganz weglassen, da dieser dann automatisch und passend zum gewählten Dateityp vom System vergeben wird.
Auch würde ich nicht den Typ xmlWorbookDefault verwenden, denn wer weiß schon genau, was der DefaultTyp ist.
Verwende wie von Nepumuk gezeigt den Typ für xlsx, also 51 oder xlopenxmlworkbook
Gruß Daniel
Gruß Daniel
Anzeige
AW: Beim speichern VBA Code löschen
08.09.2021 17:43:14
Memo
Hi Daniel,
ja der Weg von Nepumuk hat mich zum Ziel gebracht.
Danke für deine Unterstützung.
VG,
Memo
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige