Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1456to1460
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
Inhaltsverzeichnis

Makros löschen

Makros löschen
21.11.2015 13:11:22
fabi
Hallo Forum
ich habe ein COde, der beim Speichern eine Sicherheitskopie an legt
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Const FOLDER_PATH As String = "______ Hier steht mein Pfad drin_____"
Dim strFilename As String
With ThisWorkbook
strFilename = Left$(.Name, InStrRev(.Name, ".") - 1)
strFilename = strFilename & Format(Now, "_yyyymmdd_hh-mm_") & _
Mid$(.Name, InStrRev(.Name, "."))
Call .SaveCopyAs(FOLDER_PATH & strFilename)
End With
End Sub
nun meine Frage:
ist es möglich, die Makros, aus der Sicherheitskopie zu löschen, ohne das ich die Datei öffnen muss und/oder per Hand löschen muss.
ist es auch möglich nur bestimmt Makros zu löschen nicht gleich alle?
danke für eure Hilfe
gruß
Fabi

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das einfachste ...
21.11.2015 14:07:09
RPP63
... dürfte sein, Fabi,
die Datei als .xlsx zu speichern.
Dann sind alle Makros ohne Aufwand weg.
Dies geht aber nicht mit der .SaveCopyAs-Methode, sondern mit
Call .SaveAs(FOLDER_PATH & strFilename, xlOpenXMLWorkbook)
Gruß Ralf

AW: Das einfachste ...
21.11.2015 17:23:02
fabi
Hey Ralf
danke dir
ich habe dein Lösungsweg einmal versucht, aber leider kommt eine Fehlermeldung bei deiner Code-Zeile
gibt es eine Möglichkeit nur bestimmte Makros und/oder UserForms zu löschen - das würde mir besser gefallen, da manche makros beibehalten werden sollen
grüße Fabi

Anzeige
AW: Das einfachste ...
21.11.2015 20:14:20
Sepp
Hallo Fabi,
welche Makros bzw. UserForms sollen gelöscht werden?
Wo stehen die Makros? Allgemeines Modul oder in der Tabelle/Arbeitsmappe?
Gruß Sepp

AW: Das einfachste ...
21.11.2015 20:39:59
Sepp
Hallo Fabi,
probier mal. Makro bzw. Modul-Namen musst du natürlich anpassen und in den Exceloptionen > Sicherheitscenter, den Zugriff auf das VBA-Projektmodell zulassen!
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Const FOLDER_PATH As String = "______ Hier steht mein Pfad drin_____"

Dim strFilename As String

With ThisWorkbook
  strFilename = Left$(.Name, InStrRev(.Name, ".") - 1)
  strFilename = strFilename & Format(Now, "_yyyymmdd_hh-mm_") & _
    Mid$(.Name, InStrRev(.Name, "."))
  
  'Code bzw. Module löschen
  Call deleteCode(ThisWorkbook, "UserForm1") 'entfernt 'UserForm1'
  Call deleteCode(ThisWorkbook, "Modul4") 'entfernt das gesamte 'Modul4'
  Call deleteCode(ThisWorkbook, "Modul3", "DeinMakro") 'entfernt 'DeinMakro' aus 'Modul3'
  Call deleteCode(ThisWorkbook, "Tabelle1") 'entfernt gesamten Code aus dem Modul der 'Tabelle1' (CodeName)
  
  Call .SaveCopyAs(FOLDER_PATH & strFilename)
End With

End Sub

Private Sub deleteCode(ByVal WBook As Workbook, ByVal ModulName As String, Optional ProcName As String)
Dim objVBComp As Object
Dim lngStart As Long, lngCount As Long

With WBook.VBProject
  For Each objVBComp In .vbComponents
    If objVBComp.Name = ModulName Then
      If objVBComp.Type = 100 Or ProcName <> "" Then
        With .vbComponents(objVBComp.Name).CodeModule
          If ProcName = "" Then
            .DeleteLines 1, .CountOfLines
          Else
            lngStart = .ProcStartLine(ProcName, vbext_pk_Proc)
            lngCount = .ProcCountLines(ProcName, vbext_pk_Proc)
            .DeleteLines lngStart, lngCount
          End If
        End With
      Else
        .vbComponents.Remove objVBComp
      End If
    End If
  Next
End With
End Sub

Gruß Sepp

Anzeige
AW: Das einfachste ...
22.11.2015 11:07:26
Nepumuk
Hallo Sepp,
dein Code hat zur Folge dass die Originalmappe auch ohne Makros gespeichert wird.
Gruß
Nepumuk

AW: Das einfachste ...
22.11.2015 11:38:17
Sepp
Hallo Max,
wie geht's dir immer?
Du hast natürlich recht, hab wohl zu schnell geschossen.
So sollte es aber klappen.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim strFilename As String
Dim objWB As Workbook

Const FOLDER_PATH As String = "E:\Forum\Test2\"

Application.EnableEvents = False

With ThisWorkbook
  strFilename = Left$(.Name, InStrRev(.Name, ".") - 1)
  strFilename = strFilename & Format(Now, "_yyyymmdd_hh-mm_") & _
    Mid$(.Name, InStrRev(.Name, "."))
  
  Call .SaveCopyAs(FOLDER_PATH & strFilename)
  
  Set objWB = Workbooks.Open(FOLDER_PATH & strFilename)
  
  'Code bzw. Module löschen
  Call deleteCode(objWB, "DieseArbeitsmappe") 'entfernt den Code aus 'DieseArbeitsmappe1'
  Call deleteCode(objWB, "UserForm1") 'entfernt 'UserForm1'
  Call deleteCode(objWB, "Modul2") 'entfernt das gesamte 'Modul2'
  Call deleteCode(objWB, "Modul1", "DeinMakro") 'entfernt 'DeinMakro' aus 'Modul1'
  Call deleteCode(objWB, "Tabelle1") 'entfernt gesamten Code aus dem Modul der 'Tabelle1' (CodeName)
  objWB.Close True
  
End With

Application.EnableEvents = True
End Sub

Private Sub deleteCode(ByVal WBook As Workbook, ByVal ModulName As String, Optional ProcName As String)
Dim objVBComp As Object
Dim lngStart As Long, lngCount As Long

With WBook.VBProject
  For Each objVBComp In .vbComponents
    If objVBComp.Name = ModulName Then
      If objVBComp.Type = 100 Or ProcName <> "" Then
        With .vbComponents(objVBComp.Name).CodeModule
          If ProcName = "" Then
            .DeleteLines 1, .CountOfLines
          Else
            lngStart = .ProcStartLine(ProcName, 0)
            lngCount = .ProcCountLines(ProcName, 0)
            .DeleteLines lngStart, lngCount
          End If
        End With
      Else
        .vbComponents.Remove objVBComp
      End If
    End If
  Next
End With
End Sub

Gruß Sepp

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige