Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Workbook_open Code per VBA Code entfernen

399 views
Skip to first unread message

Petra Bauer

unread,
Feb 24, 2003, 11:38:12 AM2/24/03
to
Hallo NG

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

Reiner Wolff

unread,
Feb 24, 2003, 12:07:55 PM2/24/03
to
Moin 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


Melanie Breden

unread,
Feb 24, 2003, 12:06:09 PM2/24/03
to
Hallo Petra,

"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

unread,
Feb 24, 2003, 3:52:12 PM2/24/03
to
Hallo Petra,

"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

Petra Bauer

unread,
Feb 24, 2003, 2:33:53 PM2/24/03
to
Danke Melanie

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...

Melanie Breden

unread,
Feb 24, 2003, 3:17:52 PM2/24/03
to
Hallo Petra,

"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

Bernd Augustin

unread,
Feb 25, 2003, 8:39:10 AM2/25/03
to
Hallo Petra, hallo Melanie

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...

0 new messages