vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Macros 
Autor: RalfH
Datum: 10.10.03 07:24

Servus,

ich hatte das gleiche Problem schon mal in EXCEL-VBA.

Der folgende Code entfernt alle Module, Klassenmodule, Userformen und Verweise aus einem Word-Dokument. Da das gebundene Modul "ThisDocument" ja nicht entfernt werden kann, wird bei diesem nur der gesamte Inhalt gelöscht.

Das ganze ist ein Word-VBA-Makro, kann jedoch mit etwas Aufwand auch in VB-Code umgewandelt werden.

Option Explicit
 
' VBA-Projekt-Komponententypen:
Const vb_GebundenesModul = 100  ' gebundenes Modul (Einträgen unter <Microsoft 
' Word Objekte>)
Const vb_StandardModul = 1      ' Standard-Modul
Const vb_KlassenModul = 2       ' Klassenmodul
Const vb_Userform = 3           ' Userform
 
Public Sub RemoveVBACode()
 
  ' sämtliche VBA-Makros aus dem Dokument entfernen
  ' - das Dokument muss dazu geöffnet sein
  ' - den Dateiname OHNE Ordner angeben
  RemoveVBACodeFromDocument "Dokument1"
 
End Sub
 
' Dateiname - enthält den Dateinamen OHNE Ordner
Private Sub RemoveVBACodeFromDocument(ByVal Dateiname As String)
  Dim Projekt, VBKomponente, LinkedFile, I As Long
 
  ' Makro-Unterbrechung durch CTRL+PAUSE unterbinden
  Application.EnableCancelKey = wdCancelDisabled
 
  If MsgBox( _
    "Soll der VBA-Code aus """ & Dateiname & _
    """ vollständig entfernt werden?", _
    vbQuestion + vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub
 
  On Error GoTo Fehler
 
  ' Zeiger auf das VBA-Projekt des Dokumentes setzen
  Set Projekt = Documents(Dateiname).VBProject
 
  ' Alle Objekte (Module, Userformen, ...) des VBA-Objektes durchlaufen
  For Each VBKomponente In Projekt.VBComponents
 
    ' alle Code-Module außer den Einträgen unter <Microsoft Word Objekte>
    ' aus dem Projekt entfernen
    If VBKomponente.Type <> vb_GebundenesModul Then
 
      Projekt.VBComponents.Remove VBKomponente
 
    Else
 
      ' Inhalt der Code-Module unter <Microsoft Word Objekte> löschen
      VBKomponente.CodeModule.DeleteLines 1, _
        VBKomponente.CodeModule.CountOfLines
 
    End If
 
  Next VBKomponente
 
  ' alle Verweise entfernen
  For Each LinkedFile In Projekt.References
 
    ' damit wird das Err.Object jedesmal vor dem Entfernen eines
    ' Verweises zurückgesetzt, damit ist jedesmal die aktuelle
    ' Fehlernummer verfügbar
    ' Err.Number = 0   (kein Fehler)
    ' Err.Number = 57101   (Verweis ist ein Standardverweis/darf und kann nicht 
    ' gelöscht werden)
    On Error Resume Next
    Projekt.References.Remove LinkedFile
 
    If Err.Number <> 57101 And Err.Number <> 0 Then GoTo Fehler
 
  Next LinkedFile
 
  ' Speicher freigeben
  Set LinkedFile = Nothing
  Set VBKomponente = Nothing
  Set Projekt = Nothing
 
  MsgBox "Der VBA-Code wurde erfolgreich aus """ & Dateiname & _
    """ entfernt.", vbInformation
 
  ' das wars
  Exit Sub
 
' Fehlermeldung
Fehler:
 
  ' Speicher freigeben
  Set LinkedFile = Nothing
  Set VBKomponente = Nothing
  Set Projekt = Nothing
 
  MsgBox "Der VBA-Code konnte aus """ & Dateiname & _
    """ nicht vollständig entfernt werden!" & vbCr & vbCr & "Fehler:" & _
    vbCr & Error, vbExclamation
 
End Sub

Viel Spass,
R@lf

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Macros583Juergen Mildes09.10.03 14:57
Re: Macros461RalfH10.10.03 07:24
Re: Macros372Juergen Mildes10.10.03 07:56

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel