2017-12-20 2 views
0

Ich muss den gesamten Code in meiner Arbeitsmappe mit einem Makro löschen. Ich verwende diesen Code, der pretty old scheint.Progrmatisch löschen Sie den gesamten Code

Dim x As Integer 
With ActiveWorkbook.VBProject 
    For x = .VBComponents.Count To 1 Step -1 
     .VBComponents.Remove .VBComponents(x) 
    Next x 
    For x = .VBComponents.Count To 1 Step -1 
     .VBComponents(x).CodeModule.DeleteLines _ 
     1, .VBComponents(x).CodeModule.CountOfLines 
    Next x 
End With 

Ich erhalte einen Fehler bei .VBComponents.Remove .VBComponents(x), wo Visual Basic sagt: "Laufzeitfehler '5': ungültiger Prozedur-Aufruf oder Argument." Laut this page bedeutet dieser Fehler, dass entweder meine Prozedur falsch ist oder diese Prozedur nicht mehr existiert.

Wie kann ich dieses Makro reparieren und es mit Office 2016 arbeiten lassen?

+3

warum speichern Sie es nicht einfach als .xlsx? Das entfernt den gesamten VBA-Code aus der Arbeitsmappe. – sous2817

+0

Der Fehler tritt auf, wenn Ihr Code versucht, die eingebauten 'Sheet'- oder' Workbook'-Module zu entfernen. Der ursprüngliche Code, den Sie verknüpft haben, enthält "On Error Resume Next", um diesen Fehler zu vermeiden. –

+0

@ sous2817 Ich denke deine Idee ist die beste. –

Antwort

1

Wie sous2187 sagte, ist die beste Methode, speichern Sie die Datei als Nonmacro-Datei, und lassen Sie Excel die Makros selbst entfernen. Also habe ich genau das gemacht.

Sub delhiddensheets() 

    For Each sh In Worksheets 
     If sh.Visible = xlSheetHidden Then 
      sh.Delete 
     End If 
    Next sh 

End Sub 

Sub Valuepaste() 

    Dim tabs As Object 
    For Each tabs In Sheets 
     With tabs 
      If .Visible = True Then .Select Replace:=False 
     End With 
    Next tabs 
    Cells.Select 
    Range("A1").Activate 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("A20").Select 

End Sub 

Sub DeleteAllCode() 

    Application.Calculation = xlCalculationManual 
    Application.ScreenUpdating = False 
    Application.DisplayStatusBar = False 
    Application.EnableEvents = False 
    Application.DisplayAlerts = False 

    newname = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) & "_VALS.xlsx" 
    ChDir ActiveWorkbook.Path 
    ActiveWorkbook.SaveAs Filename:=newname, FileFormat:=xlOpenXMLWorkbook 
    Valuepaste 
    delhiddensheets 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
    Application.DisplayStatusBar = True 
    Application.EnableEvents = True 
    Application.DisplayAlerts = True 

End Sub 
2

Der Grund für einen Fehler ist nicht, dass der Code alt ist :): P Der Grund ist, dass Sie alle Module löschen ... einschließlich der mit den "DeleteAllModules": P ups. btw nur für den Fall brauchen Sie referencest zu Microsoft Visual Basic für Applikationen Extensibility 5.3 und stellen Sicherheit "un safe" gesetzt

für Details goto https://www.google.pl/amp/s/christopherjmcclellan.wordpress.com/2014/10/10/vba-and-git/amp/

aber nur für schnelle Lösung

Option Explicit 
'@Folder("DevTools") 

Const devTools As String = "devTools" 
'This is the name of module with "RemoveAllModules" and it will be ignored 

Private Sub RemoveAllModules() 
Dim comp As VBComponent 

For Each comp In Application.VBE.ActiveVBProject.VBComponents 
    If comp.Type = vbext_ct_ClassModule Or comp.Type = vbext_ct_StdModule Then 
     If Not comp.name = devTools Then 
      Application.VBE.ActiveVBProject.VBComponents.Remove comp 
     End If 
    End If 
Next 

End Sub 
+0

Es ist besser, nach '<> vbext_ct_Document' zu suchen, da Ihr Code UserForms nicht so löscht, wie er ist. Sie müssen auch die zweite Schleife beibehalten, um Code aus den Dokumentmodulen zu entfernen. –

Verwandte Themen