Office: Code durch Code ersetzten

Helfe beim Thema Code durch Code ersetzten in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Zusammen, ich hab da ein kleines/großes Problem mit diversen Excel Dateien, die alle ziemlich viel VBA Code enthalten. Ist es möglich diesen... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von sirjan, 13. Mai 2008.

  1. Code durch Code ersetzten


    Hallo Zusammen,

    ich hab da ein kleines/großes Problem mit diversen Excel Dateien, die alle ziemlich viel VBA Code enthalten.

    Ist es möglich diesen Code "von außen" zu ersetzen?

    Hintergrund: Es sind im VBA Code Netzwerkpfade eingetragen, die ich dringend ändern muss. Jetzt wäre es fein, wenn ich das in ca 500 Dateien nicht per Hand machen muss sondern ein kleines Prog drüberlaufen lassen kann, das mir alle erforderlichen Codeelemente findet und ersetzt!


    Vielen Dank schon mal für Eure Hilfe

    Jan

    :)
     
    sirjan, 13. Mai 2008
    #1
  2. Bei solchen "Meta-Probleme" verwende ich immer "Sendkeys".


    das ist zwar manchmal eine Tüftelarbeit - funktioniert aber bisher immer.

    Habe selbst einmal damit ein Password-Cracker für Excel-Dateien geschrieben - dauert halt eine Weile bis er das Passwort findet - funktioniert aber.

    Mache vorher unbedingt ein sicheres Backup aller manipulierten Dateien!
     
    Karlin78, 15. Mai 2008
    #2
  3. Hi Danke für den Tip. Ich hab mal was über VBComponents.CodeModul usw. gelesen. Angeblich kann man damit direkt in den Code eingreifen.

    Leider finde ich überhaupt keine Doku zu diesen Funktionen.

    Mit Sendkey Befehlen ist es halt leider extrem Fehleranfällig. Zumal ich nicht immer nach dem gleichen String im Code suchen muss :-(
     
    sirjan, 15. Mai 2008
    #3
  4. Code durch Code ersetzten

    Hallo!

    Sieh dir mal das Objekt ThisWorkbook.VBProject an.

    Zur Vorbereitung aber noch etwas zum Lesen aus der Microsoft Hilfe:
    Viele Grüße
    rastrans
     
    rastrans, 15. Mai 2008
    #4
  5. Wieviel Module musst du denn bearbeiten?

    Wenns nicht zu viel ist, dann exportiere einfach die *.Bas Dateien und mache halt alles in einem Textverarbeitungsprogramm...

    ps die Formatierung bleibt dabei erhalten

    probier evtl auch mal VBA CODE COMPARE oder ähnliche Programme, evtl haben diese eine Suche/Ersetzen Funktion
     
    Karlin78, 15. Mai 2008
    #5
  6. Hallo Jan,

    erstell Dir mal probeweise eine Datei mit Namen "Codeänderer.xls" mit 2 Blättern namens "Änderungen" und "Schutz".
    Zuletzt füge ein Modul mit Namen "Codeänderer" ein, in das Du mal folgenden Code kopierst:

    Code:
    Der Code ist leider nicht sonderlich hübsch, aber es musste damals in einem ähnlichen Fall wie bei Dir fix gehen, da hatte ich keine Zeit zum "Hübschmachen".

    Da sind ein paar Zeilen für die Protokollierung der Änderungen bzw. Rückmeldungen, falls ein VBA-Projekt geschützt ist. Die kannst Du natürlich auch entfernen, ich fand sie damals aber lebenswichtig, um ggf. ungewollte Änderungen aufspüren zu können.

    Ach ja, rastrans hat ja schon den Hinweis gegeben, dass der Zugriff auf das VBA-Projekt erlaubt werden muss. Unbedingt beachten!

    Grüße
    EarlFred
     
    EarlFred, 15. Mai 2008
    #6
  7. Hi Leute,

    danke für eure schnellen Antworten *Smilie

    Das mit der Makro Freigabe hab ich gewust.

    Ich werd gleich mal Deinen Code anpassen und ausprobieren EarlFred


    Viele Grüße

    Jan
     
    sirjan, 15. Mai 2008
    #7
  8. OfficeUser Neuer User

    Code durch Code ersetzten

    Hallo Jan,

    habe Dir hierzu ein Makro geschrieben, das in allen Mappen eines Verzeichnisses den VBA-Code nach dem String durchforstet und ihn ersetzt :

    VBA-Code:
    '****************************************************************
    '* Ersetzen von VBA-Code in mehreren Dateien eines Odners       *
    '* Erstellt von : NoNet, www.excelei.de                         *
    '* Erstellt/aktualisiert am : 15.05.2008                        *
    '****************************************************************

    Public wsLog As Worksheet 'Mappe für die Protokollierung
    Public lngZeile As Long
    Const strAlt = "\MeinNetz" 'Der Text/Pfad, der getauscht werden soll
    Const strNeu = "X:\Dein\Neuer\Ordner" 'Der neue Text/Pfad

    Sub VBACodeInAllenDateienTauschen()
        Application.EnableEvents = False
        Dim Pfad, Dateien, AktuelleDatei
        Dateien = "*.xls" ' hier den Dateityp anpassen !
        'Dateien = "*.txt" ' Für Excel: *.txt Dateien durchsuchen
        Pfad = "C:\Temp\" 'Hier das Verzeichnis anpassen, das durchsucht werden soll
        Set wsLog = ActiveWorkbook.Sheets("Protokoll") 'Protokoll in aktuelle Mappe
        wsLog.[A1:B1] = Array("Dateiname", "Status")
        lngZeile = 1

        Dateien = Dir(Pfad & Dateien)
        While Dateien <> ""
            AktuelleDatei = Dateien
            'MsgBox AktuelleDatei 'Dateinamen der Datei ausgeben
            'BearbeitenWord AktuelleDatei 'Datei mit WORD öffnen und Bearbeiten
            BearbeitenExcel Pfad & AktuelleDatei 'Datei mit Excel öffnen und Bearbeiten
            Dateien = Dir
        Wend

        Application.EnableEvents = True
    End Sub

    Sub BearbeitenVBProject(Dateiname)
        On Error Resume Next
        Dim intZaehler As Integer
        intZaehler = 0

        Dim wb As Workbook
        Set wb = Workbooks.Open(Dateiname)
        If Err = 0 Then
            lngZeile = lngZeile + 1
            If wb.VBProject.Protection = vbext_pp_none Then
                For Each vb In wb.VBProject.VBComponents
                    For vbzeile = 1 To vb.CodeModule.CountOfLines
                        If InStr(vb.CodeModule.Lines(vbzeile, 1), strAlt) > 0 Then
                            vbCodezeile = vb.CodeModule.Lines(vbzeile, 1)
                            vb.CodeModule.DeleteLines vbzeile
                            vb.CodeModule.InsertLines vbzeile, Replace(vbCodezeile,  strAlt, strNeu)
                            intZaehler = intZaehler + 1
                        End If
                    Next
                Next
                wsLog.Cells(lngZeile, "A") = wb.FullName
                wsLog.Cells(lngZeile, "B") = intZaehler & " Zeilen geändert"
                If intZaehler > 0 Then wb.Save      'Speichern, wenn geändert wurde
            Else
                wsLog.Cells(lngZeile, "A") = wb.FullName
                wsLog.Cells(lngZeile, "B") = "VBA Gesperrt !"
            End If

            wb.Close False 'Datei schließen ohne zu speichern
        Else
            wsLog.Cells(lngZeile, "A") = Dateiname
            wsLog.Cells(lngZeile, "B") = "Fehler beim Öffnen !"
        End If
        wsLog.Hyperlinks.Add wsLog.Cells(lngZeile, "A"), Dateiname 'Hyperlink  zur Datei erstellen
    End Sub

    Code eingefügt mit Syntaxhighlighter 4.15
    Den Pfad "C:\Temp\" und die beiden zu ersetzenden STRINGS musst Du natürlich anpassen ;-) Beachte, dass der Pfad am Ende mit "\" terminiert werden muss !

    Noch ein paar Hinweise : Zum Durchsuchen und Ändern des VBA-Codes müssen die einzelnen Mappen nacheinander geöffnet werden. Beim Öffnen einer Mappe kann natürlich verschiedenes ablaufne (Verknüpfung aktualisieren, Neuberechnung, Makro-Events etc.) ich habe nur das Makro-Event unterbunden, jedoch nicht die anderen Dinge ! Ebenso wird beim Speichern natürlich das Datum der Datei aktualisiert und evtl. auch ein Event ausgelsöt (das nun aber unterbunden wird). Ich habe auch nicht getestet, ob evtl. Freigaben, Schreibschutz etc. vorhanden ist, das müsstest Du alles selbst überprüfen.
    Grundsätzlich funktioniert mein Makro - in der akteullen Mappe wird ein Protokoll im Blatt "Protokoll" geführt (dieses Blatt bitte anlegen oder im code umbenennen).

    Da ich DIR() verwendet habe, werden KEINE Unterverzeichnisse durchsucht !

    Teste das daher bitte zunächst an einer Kopie Deines Datenbestandes.

    Gruß und Bitte um Rückmeldung,
    NoNet
     
    OfficeUser, 15. Mai 2008
    #8
  9. Hi Zusammen,

    für alle die sowas auch in Zukunft mal machen wollen stelle ich hier gerne meinen Quelltext zur Verfügung. Ein Frage hätte ich noch:

    Ich kann ohne Probleme Abfragen, ob der Quelltext Passwortgeschütz ist (...[].protection = VBIDE.vbext_ProjectProtection.vbext_pp_locked)

    Aber wie kann ich geschützten Quelltext editieren, d.h. wie kann ich ein Paswort weitergeben?

    Viele Grüße

    Jan

    Code:
     
    sirjan, 15. Mai 2008
    #9
  10. Hallo!

    Mal eine Gegenfrage: Try-Catch Anweisung gibt es doch in VBA nicht?!?

    Gruß
    rastrans
     
    rastrans, 15. Mai 2008
    #10
  11. Ja ich hab das ganze mit vb.net programmiert, vielleicht noch als Info.

    Mir ist es lieber, wenn ich das ganze in einer eigenständigen *.exe Datei habe.

    Mit VB.net muss man halt nur die entsprechenden dll's einbinden, dann ist es wie wenn man es in Excel VBA schreibt.

    Das mit der Passwortübergabe ist warscheinlich ganz simpl, aber diese ganzen Funktionen des VBProject sind irgendwie beschi... dokumentiert *mad.gif* *mad.gif*
     
    sirjan, 15. Mai 2008
    #11
Thema:

Code durch Code ersetzten

Die Seite wird geladen...
  1. Code durch Code ersetzten - Similar Threads - Code Code ersetzten

  2. Per Hyperlink ausgeblendetes Blatt einblenden

    in Microsoft Excel Hilfe
    Per Hyperlink ausgeblendetes Blatt einblenden: Hola ins Forum, ich bräuchte mal wieder eure Hilfe. Ich habe ein Tabellenblatt das mir als Register dient und wo Hyperlinks eingefügt sind um auf das dazugehörige Blatt zu springen. Diese Blätter...
  3. Code wird nicht komplett ausgeführt

    in Microsoft Excel Hilfe
    Code wird nicht komplett ausgeführt: Guten Morgen in die Runde! Situation: Dieser Code wird nicht komplett ausgeführt. es wird der Teil mit der Du Until Schleife übersprungen. Wenn ich aber mit Einzelschritte durch den Code gehe...
  4. Rabat Codes in einen Serienbrief einfügen

    in Microsoft Word Hilfe
    Rabat Codes in einen Serienbrief einfügen: Hi, Ich möchte bei einem Brief für meine Kunden eine Rabatcode einfügen. Diese sind zufällig erstellt und in Excel als Tabelle gespeichert. Wie bekomme ich diese nun so eingefügt das auf jedem...
  5. Combobox einbinden

    in Microsoft Excel Hilfe
    Combobox einbinden: Hallo, ich bastele an einer Funktion, bei der ich an einer Stelle im Programm eine Combobox aufrufen möchte, die dann mit bestimmten Werten aus einer Tabelle gefüllt ist und dann den gewählten...
  6. VBA Code für Zeilen ausblenden einblenden mit JA/Nein

    in Microsoft Excel Hilfe
    VBA Code für Zeilen ausblenden einblenden mit JA/Nein: Hallo, habe eine Exceltabelle, bei der ich bei einer Zelle eine Ja/Nein abfrage mache, wenn in der Zelle Nein steht, dann soll ein bestimmter Zeilenbereich, den ich definieren möchte, ausgeblendet...
  7. VBA Code ohne ergebnis

    in Microsoft Excel Hilfe
    VBA Code ohne ergebnis: Hallo, ich habe einen VBA Code der in meiner Tabelle nicht funktioniert. Kann mir vielleicht jemand bei der Korrektur ggf. weiter helfen? Danke und Gruß Private Sub Worksheet_Change(ByVal Target...
  8. Bild löschen auch wenn es nicht vorhanden ist?! Code funktioniert nicht mehr..

    in Microsoft Excel Hilfe
    Bild löschen auch wenn es nicht vorhanden ist?! Code funktioniert nicht mehr..: Hallo Leute, Habe ein Macro in Benutzung das jetzt über Monate gut funktioniert hat und jetzt kam anscheint ein update und es funktioniert nicht mehr, wobei ich es mir nicht erklären kann, weil...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden