Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
628to632
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
628to632
628to632
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Codes deaktivieren!

Codes deaktivieren!
27.06.2005 10:14:27
serge
Hallo Spezialisten
ich brauch Rat oder Hilfe!
Kann ich per VBA alle Codes einer Datei auf einmal deaktivieren oder anders alle Sub.. löschen?
Danke
Serge

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Codes deaktivieren!
27.06.2005 10:33:31
Heiko
Hallo Serge,
dieser Code löscht das komplette VBA. Codezeilen aus DieseArbeitsmappe und Tabellenblättern, UserForms, Module und Klassenmodule.

Sub Loeschen()
Dim vbc As Object
Dim strFile As String
' bei Fehler zum Errorhandler
On Error GoTo Errorhandler
' Mit dem VBA Objekten in der aktiven Datei.
With ActiveWorkbook.VBProject
' Ein Schleife die ALLE VBComponents durchläuft, sollen nur bestimmte gelöscht werden
' dann muss dieser Code angepaßt werden.
For Each vbc In .VBComponents
Select Case vbc.Type
' Wenn Type = 100, also DieseArbeitsmappe oder ein Tabellenblatt, dann darin
' alle Codezeilen löschen. Denn die Datei und die Tabellenblätter sollen ja
' erhalten bleiben, also nur den Code löschen.
Case 100
With .VBComponents(vbc.Name).CodeModule
.DeleteLines 1, .CountOfLines
End With
' Wenn Type = 1 dann ist es ein Standardmodul, dies wird komplett gelöscht!
Case 1
' Löschen des Standardmodules, mann kann auch Module dirket mit Namen
' ansprechen. Zb. Löscht die nächste Zeile Modul 1
' .VBComponents.Remove .VBComponents("Modul1")
.VBComponents.Remove .VBComponents(vbc.Name)
' Wenn Type = 2 dann ist es ein Klassennmodul, dies wird komplett gelöscht!
Case 2
.VBComponents.Remove .VBComponents(vbc.Name)
' Wenn Type = 3 dann ist es ein Userform, dies wird komplett gelöscht!
Case 3
.VBComponents.Remove .VBComponents(vbc.Name)
End Select
Next vbc
End With
' Wenn alles gelöscht wurde, dann raus hier!
Exit Sub
' Bei Fehlernummer 1004, diese Meldung ausgeben.
Errorhandler:
If Err.Number = 1004 Then
MsgBox "Das Löschen des VBA Codes ist fehlgeschlagen!" & vbCr & _
"Bitte überprüfen Sie folgende Einstellung! " & vbCr & _
"EXTRAS -> MAKRO -> SICHERHEIT -> Vertrauenwürdige Quellen." & vbCr & _
"'Zugriff auf Visual Basic Projekt vertrauen' muss aktiviert sein! ", vbCritical, _
" Meldung vom Makro Loeschen"
Else
MsgBox "Err.Number = " & Err.Number & ".   " & Err.Description, vbCritical
End If
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
Super!
27.06.2005 11:04:14
serge
Danke Heiko
ich habe es 1:1 kopiert und eingesetzt und ...ES FUNKTIONIERT!
Grüsse aus dem Elsass
Serge
AW: Super!
27.06.2005 23:00:26
Mathias
Hallo Heiko,
ich bin auf ein ähnliches Problem wie das von dir gelöste gestoßen.
Bitte hilf mir weiter.
Ich möchte nicht den gesamten Code löschen, sondern nur einen Teil im Macro ändern (ersetzen) oder löschen.
Nun habe ich mit deinem Code etwas gespielt, aber nicht verstanden
Wenn ich case 1 aktiviert ist, dann wird die Schleife sooft durchlaufen, wie Zeilen in allen Modulen existieren. Im Anschluß werden damit leider alle Zeilen in allen Modul gelöscht.
Du hast ja alles prima beschrieben, bin aber leider nicht helle genug:
For Each vbc In .VBComponents
wenn nicht alle/ each vbc durchlaufen werden sollen, sondern nur Modul2 was muß dann dort rein?
Und wie kann nur eine spezielle Zeile von z.B. Modul 2 gelöschen werden?
Danke, RI wäre echt super!
Gruß
Mathias
Anzeige
AW: Super!
28.06.2005 08:04:45
Heiko
Hallo Matthias,
suchst du sowas ?!

Sub vbaZeileloeschen()
With ActiveWorkbook.VBProject
MsgBox "Hiermit wird die die 9. Zeile im Modul2 gelöscht !!! "
With .VBComponents("Modul2").CodeModule
' Lösche Zeile 9 , eine Zeile "lang".
' .DeleteLines 5, 3 löscht z.B. die 5. 6. und 7. Zeile in Modul1
.DeleteLines 9, 1
End With
End With
End Sub


Sub vbaZeileersetzen()
With ActiveWorkbook.VBProject
MsgBox "Hiermit wird die die 7. Zeile im Modul2 ersetzt !!! "
With .VBComponents("Modul2").CodeModule
' Lösche Zeile 9 , eine Zeile "lang".
' .DeleteLines 5, 3 löscht z.B. die 5. 6. und 7. Zeile in Modul1
.ReplaceLine 7, "strHelp = "" Test Text Neu"""
End With
End With
End Sub

Und das ist bei mir in Modul2:
Option Explicit
' Dies ist ein Test

Sub TestAusgabe()
' Variablendeklaration
Dim strHelp As String
strHelp = " Test Text Original"  ' Diese Zeile wird ersetzt.
MsgBox strHelp
' Zeile die gelöscht werden soll ' Diese Zeile wird gelöscht.
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: Super!
28.06.2005 21:10:24
Mathias
Hallo Heiko,
vielen dank!
Genau das richtige! Bin voll begeistert!
Nun bin ich noch auf ein weiteres Problem gestoßen.
Die zu ersetztende Zeile soll entsprechend einer zuvor definierten Variablen geändert werden;
A= "Hallo"
.ReplaceLine 7, "strHelp = A"
....
In Zeile 7 soll nur jetzt nicht
strHelp = A
sondern
strHelp = "Hallo"
stehen
Wenn ich dein Wissen nochmals nutzen dürfte?
Danke!
Gruß
Mathias
strText = "Hallo Mathias"
29.06.2005 07:35:15
Heiko
Hallo Mathias,
das geht z.B. so.

Sub vbaZeileersetzen()
Dim strText As String
With ActiveWorkbook.VBProject
MsgBox "Hiermit wird die die 7. Zeile im Modul2 ersetzt !!! "
With .VBComponents("Modul2").CodeModule
' .ReplaceLine 7, "strHelp = "" Test Text Neu"""
strText = "Hallo Mathias"
.ReplaceLine 7, "strHelp = " & """" & strText & """"
End With
End With
End Sub

Gruß Heiko

PS: Rückmeldung wäre nett !
Anzeige
AW: strText = "Hallo Mathias"
29.06.2005 23:15:41
Mathias
Hallo Heiko,
bin ganz begeistert!!!
Danke dir für die schnelle Antwort; und deine Erklärungen/Hinweise sind perfekt!
Wenn ich sowas nur den ganzen Tag erleben dürfte...
Gruß
Mathias

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige