Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makros per Makro löschen

Makros per Makro löschen
Universal
Hallo zusammen,
ich komme irgendwie nicht weiter. Hab gegooglet und den folgenden Code zum "Löschen von Makros per Makro" gefunden. Der Code funktionier mal und mal nicht - lustig ist, dass nicht einmal eine Fehlermeldung erscheint ...
Hintergrund: Ich habe eine Excel-Mappe, die mit einem Standard-Passwort geschützt ist. Der User soll ungeschützte Zellen ausfüllen und anschließend das Dokument für immer mit einem Random-Passwort "abschließen". Bevor das Dokument jedoch finalisiert wird, soll das Makro alle Code-Zeilen und Module löschen. Nach dem Arbeitsblätter und -mappe geschützt sind, wird der Speichern-Dialog aufgerufen. Fertig. :-)
Das Makro soll also folgendes tun:
1. Schutz vom Excel-Sheet aufheben
2. Random-Passwort generieren
3. kompletten VBA-Code aus dem Dokument entfernen
4. Arbeitsblatt und -mappe mit dem Random-Passwort schützen
5. Speichern-Dialog aufrufen
Bis jetzt funktioniert alles wunderbar bis auf das Löschen des Codes. Sollte ich das ganze vielleicht in mehreren Prozeduren abarbeiten lassen? Oder hat es eventuell damit etwas zu tun, dass ich das VBA-Projekt im VB-Editor mit der Funktion "Projekt für die Anzeige sperren" versehen habe?
Vielen Dank für eure Hilfe!!!
Uni
PS: Das Häkchen unter Makro-Sicherheit "Zugriff auf Visual Basic Projekt vertrauen" ist gesetzt.
Code:
Sub Password()
'define variables:
Dim Number As Integer
Dim PLength As Integer
Dim Password As String
Dim vbObjects As Object
Dim Rows As Long
For PLength = 1 To 10 'define password length
Number = Int((90 - 48 + 1) * Rnd + 48) 'generate random value
Do While Number > 50 And Number 

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makros per Makro löschen
01.08.2009 16:26:39
Daniel
Hi
Code mit Code bearbeiten würde ich vermeiden, das ist kompliziert und fehleranfällig
ich würde folgendermassen vorgehen:
1. neue leere Datei anlegen (diese enthält keine Code)
2. die Inhalte der Tabellenblätter in die neue Datei kopieren
3. die neue Datei mit Password schützen
4. die neue Datei speichern
5. die Ursprungsdatei ohne speichern schließen. (oder vorher noch die Eingaben löschen)
somit vermeidest du auch, daß der leere Fragebogen mal ausversehen mit einer geschlossenen Version überschrieben wird.
Gruß, Daniel
Anzeige
AW: Makros per Makro löschen
06.08.2009 22:30:09
Universal
Hi zusammen,
ich schulde euch / Daniel noch eine Antwort ... Du hast Recht sich selbst löschender Code ist zu "instabil". Ich habe nun das Tool etwas abgeändert. Es funktioniert nun einwandfrei ... Das Makro ist flexibel gestaltet und von mir kommentiert ...
Vielleicht kann es jemand anderes auch gebrauchen ...
Sub Password()
Application.ScreenUpdating = False
'define variables:
Dim iSheets As Integer
Dim aSheets3 As Integer
Dim cSheets As Integer
Dim Alert As Integer
Dim Number As Integer   ' -> one password character
Dim PLength As Integer  ' -> password length
Dim Password As String  ' -> full password value
Dim Selection As String
Dim PW As String
Selection = "B1"   ' -> selection cell for choosing whether the sheet should be copied or not
PW = "123"         ' -> default password for the original document
OriginBook = ActiveWorkbook.Name    ' -> original workbook`s name defined as a variable
aSheets = Workbooks(OriginBook).Sheets.Count    ' -> amount of sheets in original workbook _
is defined in this variable
'check whether at least one sheet is selected
For iSheets = 1 To aSheets
If Workbooks(OriginBook).Sheets(iSheets).Range(Selection)  "x" Then
Alert = 1   ' -> if no sheet is selected activate the "alert"
Else
GoTo GoAhead    ' -> if at least one sheet is selected go to paragraph "GoAhead"
End If
Next iSheets
If Alert = 1 Then GoTo Error    ' -> if "alert" is activated go to paragraph "Error" and exit
GoAhead:
'unprotect all selected sheets
For iSheets = 1 To aSheets
If Workbooks(OriginBook).Sheets(iSheets).Range(Selection) = "x" Then
Workbooks(OriginBook).Sheets(iSheets).Unprotect (PW)
End If
Next iSheets
Application.Workbooks.Add   ' -> creat a new Excel workbook
NewBook = ActiveWorkbook.Name   ' -> original workbook`s name defined as a variable
aSheets2 = Workbooks(NewBook).Sheets.Count  ' -> amount of sheets in new workbook is defined _
in this variable
'copy all selected sheets into the new workbook
cSheets = 1
For iSheets = 1 To aSheets
If Workbooks(OriginBook).Sheets(iSheets).Range(Selection) = "x" Then
Workbooks(OriginBook).Sheets(iSheets).Copy After:=Workbooks(NewBook).Sheets(2 + cSheets) _
cSheets = cSheets + 1
End If
Next iSheets
'delete all existing sheets from  new workbook
Application.DisplayAlerts = False
For iSheets = 1 To aSheets2
Workbooks(NewBook).Sheets(1).Delete
Next iSheets
Application.DisplayAlerts = True
'generate random password
Randomize Timer
For PLength = 1 To 10                       ' -> define password length
Number = Int((90 - 48 + 1) * Rnd + 48)  ' -> generate random value
Do While Number > 55 And Number  if random number is invalid ...
Number = Int((90 - 48 + 1) * Rnd + 48) ' -> generate new random value
Loop                                    ' -> "Do While ... Loop" runs till random value _
is correct
Password = Password + Chr(Number)       ' -> creating password
Next PLength                                ' -> "For ... Next" runs till PLength = 10
'delete the command button (if necessary) and protect all existing sheets in new workbook
aSheets3 = Workbooks(NewBook).Sheets.Count  ' -> amount of sheets in new workbook is defined _
in this variable
For iSheets = 1 To aSheets3
With Workbooks(NewBook).Sheets(iSheets)
On Error Resume Next            ' -> if command button not available jump over _
the next line
.Shapes("cmdFinalize").Delete   ' -> delete command button (if necessary)
.Protect Password:=Password     ' -> use the generated password to protect the sheet
.EnableSelection = xlNoSelection
End With
Next iSheets
Workbooks(NewBook).Protect Password:=Password   ' -> use the generated password to protect _
the workbook
Workbooks(NewBook).Sheets(1).Select     ' -> select the first sheet of the new workbook
On Error GoTo Error2
Application.Dialogs(xlDialogSaveAs).Show    ' -> open the "Save As" dialog for the new workbook
Workbooks(OriginBook).Close SaveChanges:=False  ' -> close the original workbook without _
saving any changes
Exit Sub
Error:
MsgBox "Please select at least one sheet for finalizing the document.", vbCritical, "Error"
Exit Sub
Error2:
MsgBox "Error while saving the file.", vbCritical, "Error"
Application.ScreenUpdating = True
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Makros in Excel effektiv löschen


Schritt-für-Schritt-Anleitung

Um Makros in Excel zu löschen, kannst Du folgende Schritte befolgen:

  1. Makros auflisten: Öffne den VBA-Editor mit ALT + F11. Klicke im Projektfenster auf "DieseArbeitsmappe", um alle Makros anzuzeigen.
  2. Makro auswählen: Wähle das Makro, das Du löschen möchtest, aus der Liste aus.
  3. Makro löschen: Klicke mit der rechten Maustaste auf das Makro und wähle „Löschen“.
  4. Bestätigung: Bestätige die Löschung, wenn Du dazu aufgefordert wirst.

Für das Löschen aller Makros in einer Arbeitsmappe kannst Du den folgenden VBA-Code verwenden:

Sub AlleMakrosLoeschen()
    Dim vbComp As Object
    Dim vbProj As Object

    Set vbProj = ThisWorkbook.VBProject
    For Each vbComp In vbProj.VBComponents
        vbProj.VBComponents.Remove vbComp
    Next vbComp
End Sub

Dieser Code entfernt alle Makros in der aktuellen Arbeitsmappe und hilft Dir, das Ziel "excel alle makros löschen" effizient zu erreichen.


Häufige Fehler und Lösungen

  • Fehler: "Zugriff auf Visual Basic-Projekt nicht gewährt": Stelle sicher, dass in den Excel-Optionen unter „Trust Center“ die Option „Zugriff auf das Visual Basic-Projekt vertrauen“ aktiviert ist.
  • Fehler: Makro wird nicht gelöscht: Überprüfe, ob das VBA-Projekt im VB-Editor mit „Projekt für die Anzeige sperren“ versehen ist. Entferne die Sperre, bevor Du das Makro löschen kannst.

Alternative Methoden

Wenn Du Makros aus Excel entfernen möchtest, gibt es auch alternative Ansätze:

  1. Neue Datei erstellen: Erstelle eine neue, leere Excel-Datei und kopiere die benötigten Daten aus der alten Datei. Dies stellt sicher, dass keine Makros mitkopiert werden.
  2. Makros über den Arbeitsplatz entfernen: Du kannst auch über die Excel-Oberfläche gehen, indem Du zu „Entwicklertools“ > „Makros“ gehst und die gewünschten Makros auswählst, um sie zu löschen.

Praktische Beispiele

Hier ein Beispiel, wie Du ein Makro zum Entfernen aller Makros in einer bestimmten Datei erstellen kannst:

Sub MakrosEntfernenInDatei()
    Dim wb As Workbook
    Dim vbComp As Object

    Set wb = Workbooks.Open("Pfad\zur\deiner\Datei.xlsm")

    For Each vbComp In wb.VBProject.VBComponents
        wb.VBProject.VBComponents.Remove vbComp
    Next vbComp

    wb.Save
    wb.Close
End Sub

Mit diesem Makro kannst Du alle Makros aus einer spezifischen Excel-Datei entfernen, ohne die Datei manuell öffnen zu müssen.


Tipps für Profis

  • Backup erstellen: Vor dem Löschen von Makros ist es immer ratsam, ein Backup Deiner Datei zu erstellen.
  • Makros dokumentieren: Halte eine Übersicht über die Funktionen und Zwecke Deiner Makros, um den Überblick zu behalten und gezielt Makros zu entfernen.
  • Verwendung von Random-Passwörtern: Wenn Du Makros mit sensiblen Daten verwendest, implementiere den Schutz mit einem Random-Passwort, um die Sicherheit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich alle Makros in Excel löschen?
Du kannst dies einfach durch den VBA-Code AlleMakrosLoeschen tun, den ich oben beschrieben habe.

2. Was passiert, wenn ich ein Makro lösche?
Wenn Du ein Makro löscht, ist es nicht mehr verfügbar und kann nicht wiederhergestellt werden, es sei denn, Du hast ein Backup.

3. Kann ich Makros aus einer geschützten Datei entfernen?
Ja, Du musst jedoch zuerst den Schutz aufheben, bevor Du die Makros löschen kannst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige