Ich möchte vor dem Schließen einer Datei das VBA Projekt komplett löschen.
Ist das irgendwie möglich? Es besteht nur ein Modul.
Vielen Dank Euch!!
Liebe Grüße
Jonathan
Sub Module_UserFormen_entfernen()
Dim Ding As Object
With ThisWorkbook.VBProject
For Each Ding In ThisWorkbook.VBProject.VBComponents
'Type 100 = DieseArbeitsmappe und alle Tabellen
'Type 1 = Modul
'Type 3 = UserForm
'Type 2 = Klassenmodul
If Ding.Type 100 Then
.VBComponents.Remove Ding
End If
Next
End With
End Sub
Sub demo()
ThisWorkbook.Save
Application.Quit
End Sub
Gruss Rainer
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Datei As String
Dim wbk As Workbook
Dim codeObject As Object
Dim fs
Dim temp() As String
On Error Resume Next
Cancel = True
Set fs = CreateObject("Scripting.FileSystemObject")
Application.ScreenUpdating = False
While Datei = ""
Datei = Application.GetSaveAsFilename(, "Microsoft Office Excel Arbeitsmappe (*.xls), (*.xls)" _
, , "Microsoft Excel")
temp = Split(Datei, "\")
Set wbk = Nothing
If fs.FileExists(Datei) Then
If MsgBox("Die Datei " & temp(UBound(temp)) & " besteht bereits. Wollen Sie die bestehende _
Datei überschreiben?", vbYesNo, "Microsoft Excel") = vbNo Then
Datei = ""
Else
Set wbk = Workbooks(temp(UBound(temp)))
If Not wbk Is Nothing Then
MsgBox ("Kann nicht unter dem Namen einer bereits geöffneten Arbeitsmappe speichern. Es _
ist bereits ein Dokument mit dem von Ihnen angegebenen Namen geöffnet. Wählen Sie einen anderen Namen für die Arbeitsmappe oder schließen Sie das geöffnete Dokument, bevor Sie speichern.")
Datei = ""
End If
End If
End If
Wend
If Datei Then
ThisWorkbook.SaveCopyAs Filename:=Datei
Set wbk = Workbooks.Open(Datei)
If Not wbk Is Nothing Then
wbk.Sheets("INDEX-Seite").Cells(39, 1).Value = Datei
' Löscht den Code in DieseArbeitsmappe
Set codeObject = wbk.VBProject.VBComponents(wbk.CodeName)
codeObject.codemodule.deletelines 1, codeObject.codemodule.countoflines
' Löscht das Modul, Modulname hier anpassen
wbk.VBProject.VBComponents.Remove wbk.VBProject.VBComponents("Modul1")
wbk.Save
ThisWorkbook.Close False
End If
End If
Application.ScreenUpdating = True
On Error GoTo 0
End Sub
Der Trick besteht darin, dass das Workbook unter anderem Namen gespeichert werden muss und in diesem Zuge der Code in der neuen Datei gelöscht wird.
Wenn Du sie mit Code speichern willst, dann mußt Du in den Entwurfsmodus gehen bzw. den Code in ein Modul statt in BeforeSave packen (dann aber die Löschroutinen anpassen).
Gruss, Jogy