Ich hab mir in der Onlinehilfe etwas zusammengesucht um den Workbook_Open
Code per Makro zu entfernen. leider klappt es nicht ganz. Was ist falsch
daran?
Sub codeentf()
On Error Resume Next
With ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe")
.CodeModule.DeleteLines 1, "Private Sub Workbook_Open()"
.CodeModule.DeleteLines 2, "Application.Run
"Mappe1.xls'!MeinMakro"
.CodeModule.DeleteLines 3, "End Sub"
End With
End Sub
Gruß
Petra
Da bleiben aber noch ein paar Fragen offen:
- was genau passiert denn oder passiert denn nicht?
- warum benutzt Du ein 'On Error Resume Next'? Dadurch werden Dir die Fehler
doch gar nicht angezeigt.
- welche Excel-Version benutzt Du?
- warum sagt mir meine Online-Hilfe zu 'DeleteLines', dass das erste
Argument die erste Zeile und das zweite Argument die Anzahl, der zu
löschenden Zeilen darstellt bzw. welche Anzahl gibt 'Private Sub
Workbook_Open()' zurück?
Greetinx
Reiner
"Petra Bauer" schrieb:
du kannst auch in einem Schwung das ganze Codemodul leer machen:
Sub codeentf()
Dim VB_Comp As Object
Set VB_Comp = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe")
VB_Comp.CodeModule.DeleteLines 1, VB_Comp.CodeModule.CountOfLines
End Sub
mit Gruß
Melanie
____________________
Melanie Breden
[Microsoft MVP für Excel]
"Melanie Breden" schrieb:
> folgende Prozedur löscht in der aktiven Arbeitsmappe den kompletten Workbook_Open Code. Weiterer Code von "DieseArbeitsmappe"
bleibt
> bestehen:
>
> Sub codeentf()
> Dim StartZeile As Byte
> Dim EndZeile As Byte
> Dim VB_Comp As Object
> Set VB_Comp = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe")
>
> On Error Resume Next
> StartZeile = VB_Comp.CodeModule.ProcBodyLine("Workbook_Open", vbext_pk_Proc)
> EndZeile = VB_Comp.CodeModule.ProcCountLines("Workbook_Open", vbext_pk_Proc)
> VB_Comp.CodeModule.DeleteLines StartZeile, EndZeile
> End Sub
ich habe noch eine Fehlerquelle aufgetan,.
Falls nach der End Sub -Zeile der angegebenen Prozedur keine weiteren Zeilen
mehr im Codeblatt sind, funzt obiger Code nicht :-(
Hier die korrigierte Version:
Sub codeentf()
Dim StartZeile As Long
Dim EndZeile As Long
Dim VB_Comp As Object
Set VB_Comp = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe")
On Error Resume Next
StartZeile = VB_Comp.CodeModule.ProcBodyLine("Workbook_Open", vbext_pk_Proc)
EndZeile = VB_Comp.CodeModule.ProcCountLines("Workbook_Open", vbext_pk_Proc)
VB_Comp.CodeModule.DeleteLines StartZeile, EndZeile - 1
Deine Lösung hilft mir im Moment weiter, solange ich keine anderen Makros
in "DieseArbeitsmappe" stehen habe. Die schießt es gleich mit raus.
Besser wäre es wenn ich das Makro "Private Sub Workbook_Open()" direkt
rauslöschen könnte.
Ich habe zwar schon bei Google nachgesehen, aber noch nichts passendes
gefunden. Vielleicht kann mir noch wer anderes einen Tipp geben,
wie man das Makro "Private Sub Workbook_Open()" direkt rauslöscht
Gruß und Danke soweit
Petra
"Melanie Breden" <Mel...@NOSPAMm-breden.de> schrieb im Newsbeitrag
news:uBCnbcC3...@TK2MSFTNGP10.phx.gbl...
"Petra Bauer" schrieb:
> Besser wäre es wenn ich das Makro "Private Sub Workbook_Open()" direkt
> rauslöschen könnte.
>
> Ich habe zwar schon bei Google nachgesehen, aber noch nichts passendes
> gefunden. Vielleicht kann mir noch wer anderes einen Tipp geben,
> wie man das Makro "Private Sub Workbook_Open()" direkt rauslöscht
folgende Prozedur löscht in der aktiven Arbeitsmappe den kompletten Workbook_Open Code. Weiterer Code von "DieseArbeitsmappe" bleibt
bestehen:
Sub codeentf()
Dim StartZeile As Byte
Dim EndZeile As Byte
Dim VB_Comp As Object
Set VB_Comp = ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe")
On Error Resume Next
StartZeile = VB_Comp.CodeModule.ProcBodyLine("Workbook_Open", vbext_pk_Proc)
EndZeile = VB_Comp.CodeModule.ProcCountLines("Workbook_Open", vbext_pk_Proc)
VB_Comp.CodeModule.DeleteLines StartZeile, EndZeile
ich habe den Code von Melanie ausprobiert und in meinen Fundus aufgenommen.
Dabei habe ich folgendes festgestellt. Am sichersten funktioniert der Code,
wenn
vor und nach dem Workbook_Open Makro keine Leerzeilen stehen.
Egal ob das Makro alleine oder zwischen anderen steht. Ohne Leerzeilen
klappt der Code ohne das "-1" in der letzen bzw. vorletzten Zeile.
Mit dem "-1" bleibt bei manchen Varianten die Zeile End Sub stehen.
In jedem Fall habe ich mir diesen Beitrag markiert, da mich dieses Thema
auch interessiert.
Viel Verständliches habe ich hierzu noch nicht gefunden. Bei Google nicht
und
in der VBA-Excel Onlinehilfe schon gar nicht.
Vielleicht gibt es in diesem Thread noch ein paar interessante Varianten
Freundliche Grüße aus der Pfalz
Bernd
http://www.bernd-augustin.de
kostenlose AddIns für Excel
"Melanie Breden" <Mel...@NOSPAMm-breden.de> schrieb im Newsbeitrag
news:OOQZ3aE...@TK2MSFTNGP12.phx.gbl...