Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Code durch VBA korrigieren

Betrifft: VBA Code durch VBA korrigieren von: Berny
Geschrieben am: 13.08.2020 18:13:29

Hallo Freunde,


ich habe großen Mist gebaut. Beim Aufbau eines Moduls in einem Formblatt habe ich eine fehlerhafte Eingabe gemacht.

Ich wollte abfragen, ob sich die Application im CutCopyMode befindet Ich frage aber nur nach dem copy modus.

Application.CutCopyMode = 1

anstatt

Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut


So und jetzt wurde das Formblatt 100 + x mal verwendet.

Ich hatte vor langer Zeit ein Modul aus einem Forum, welches einen Code ersetzt. Das habe ich jetzt versucht, aber es funktioniert leider nicht.

Sub ersetzen()

Datei = "Test.xlsm"
Modulname = "Tabelle1"
Workbooks(Datei).Activate

With Workbooks(Datei).VBProject.VBComponents(Modulname).CodeModule

     PcStrLn = 1
     PcLnCnt = .CountOfLines

     Strng = .Lines(1, .CountOfLines)

     CngdStrng = Replace(Strng, "'Application.CutCopyMode = 1'", "'Application.CutCopyMode =  _
xlCopy Or Application.CutCopyMode = xlCut'", 1, , vbTextCompare)

     .DeleteLines 1, .CountOfLines

     .AddFromString CngdStrng

End With

End Sub

Warum wird hier nichts ersetzt? Gibt es eine andere, bessere Methode?


M.f.G.


Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: Werner
Geschrieben am: 13.08.2020 18:25:39

Hallo,

das bietet dir doch im VBA Fenster angeboten. Wenn du in deinem VBA Projekt bist drück StRG & H und du kannst suchen und ersetzen. Und das in der aktuellen Prozedur, im aktuellen Modul oder Projrktweit.

Gruß Werner

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 13.08.2020 18:32:00

Hallo Werner,
Danke für deine Meldung. Das ist mir schon klar mit dem ersetzen.
Mein Problem ist, dass ich das unendliche male machen muss.
Ich habe eine Schleife um alle Mappen der Reihe nach zu öffnen.
Das Passwort bekomme ich auch auf (zumindest in meinem Test). Nur dann …
Wenn ich das alles von Hand machen will, sitze ich Tage.

M.f.G.

Berny


Betrifft: AW: snb
von: Fennek
Geschrieben am: 13.08.2020 18:40:36

Hallo,

snb schlägt das vor:
Sub Macro_code_vervangen()
With ThisWorkbook.VBProject.VBComponents("Macroos").codemodule
.DeleteLines .ProcStartLine("macro3", 0) + 1, .ProcCountLines("macro3", 0) - 2
.InsertLines .ProcStartLine("macro3", 0) + 1, "c00 = " & Chr(34) & "Dit is de nieuwste tekst"
End With
End Sub
Dabei muss im Trustcenter der Zugriff auf das VBProject zugelassen werden.

mfg

http://snb-vba.eu/VBA_Excel_VBproject_en.html#L_3.1.3

Betrifft: AW: snb
von: Berny
Geschrieben am: 13.08.2020 19:21:39

Hallo Fennek,

meintest du : "Zugriff auf das VBA Projetmodell vertrauen", oder gibt es noch eine Einstellung?
Kannst du mir das noch erklären?
.DeleteLines .ProcStartLine("macro3", 0) + 1, .ProcCountLines("macro3", 0) - 2
.InsertLines .ProcStartLine("macro3", 0) + 1, "c00 = " & Chr(34) & "Dit is de nieuwste tekst"

wo muss hier das eingesetzt werden was ich durch was ersetzen will?

M.f.G.

Berny

Betrifft: AW: vielleicht
von: Fennek
Geschrieben am: 13.08.2020 19:49:22

Hallo,

ich halte "Application im CutCopyMode" für komplet überflüßig, da es nur das Clipboard leert. Das motiviert nicht gerade, sich mit diesem Thema zu beschäftigen.

Lade den kompletten Code des Moduls hoch, vielleicht findet sich jemand, der dir hilft. Vielleicht ist es besser das Modul zu löschen und ein besseres zu importieren.

mfg

Betrifft: AW: VBA Code durch VBA korrigieren
von: onur
Geschrieben am: 13.08.2020 19:18:55

Mit "Beim Aufbau eines Moduls in einem Formblatt " meinst du das Codemodul des Blattes?
Wenn ja, ist der Name des Blattes in jeder der Dateien immer der Selbe?

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 13.08.2020 19:59:54

Hallo onur,

ja es ist der Ereignis - Code für die Tabelle oder Blatt (Worksheet_SelectionChange).

und ja die Tabelle heißt immer gleich mit dem gleichen Inhalt.

Ich kann auch alles ersetze... Hauptsache es wird korrigiert.

Gruß Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: onur
Geschrieben am: 13.08.2020 20:07:20

Dann solltest du (Makrorecorder einschalten)
Datei öffnen
zu ersetzendes Blatt auswählen
Blatt löschen
die Datei mit dem korrekten Blatt aktivieren
Blatt in die andere Datei kopieren
Makrorecorder beenden und anpassen

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 13.08.2020 20:21:20

Hallo noch mal,
so einfach ist das nicht. Die Tabelle(n) sind alle mit Daten und Formatierungen ….gefüllt.
wenn ich die Austausche sind die Daten weg!

Betrifft: AW: VBA Code durch VBA korrigieren
von: onur
Geschrieben am: 13.08.2020 20:27:49

DU hast doch geschrieben: "Ich kann auch alles ersetze... Hauptsache es wird korrigiert."

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 13.08.2020 21:30:48

mit alles Ersetzen meinte ich natürlich das Makro es muss nicht nur die eine Zeile sein. Oder warum glaubst du, dass ich so viele Kopien eine Formulars habe?

Gruß Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: onur
Geschrieben am: 13.08.2020 21:38:46

"Oder warum glaubst du, dass ich so viele Kopien eine Formulars habe?" Keine Ahnung, da du es ja nicht verraten hast - interessiert mich aber ehrlich gesagt auch gar nicht.
Ich bin dann raus, da ich keine Lust auf patzige Antworten habe, wenn ich versuche, Jemandem zu helfen.

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 14.08.2020 07:36:12

Sorry!
Das war mir schon klar, als du mich angemacht hast, weil ich erst nach 58 min auf deine Frage geantwortet habe. Dann kommt ein Lösungsvorschlag, den man sich an drei Finger abzählen kann, dass er nicht funktioniert. Und wenn's schwierig wird, ist der andere patzig.

Ich habe eine höfliche konkrete Frage ans Forum gestellt. Ich weiß, dass ich der Hilfesuchende bin.
Wenn du raus bist ist das deine Sache. Dann hoffe ich, dass sich ein anderer erbarmt mir zu helfen.
Gruß Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: onur
Geschrieben am: 14.08.2020 07:53:32

Klar, dein Problem ist ja sooooo schwierig und deswegen bin ich raus.
Das Lustigste dabei ist, dass immer die Leute Code durch Code ersetzen wollen, die nicht mal zwei fehlerfreie VBA-Zeilen am Stück schreiben können, geschweige denn ihr Problem präzise erklären.

Betrifft: AW: VBA Code durch VBA korrigieren
von: onur
Geschrieben am: 13.08.2020 19:58:32

Wen du hier Hilfe willst, solltest auch dir gestellte Fragen beantworten.

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 13.08.2020 20:04:31

Sorry, ich muss ab und zu mal etwas essen.
Außerdem habe ich seit 3 h Feierabend. deshalb schaue ich nur noch sporadische hier herein.

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 14.08.2020 07:48:23

Hallo liebe Forumsteilnehmer,
nach dem sich schon einige verabschiedet haben, möchte ich meine Frage noch einmal stellen.

Wie kann man via VBA in einem VBA - Code eine, immer gleiche Zeile, durch eine andere immer gleiche Zeile ersetzen.

siehe auch meine ursprüngliche Anfrage.
Hat jemand ein Bsp. für mich (am besten gleich im Zusammenspiel mit der Passwort Eingabe) die habe ich zwar schon hin bekommen, aber das muss ja auch zusammen passen.
M.f.G.

Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: peterk
Geschrieben am: 14.08.2020 09:35:49

Hallo

In meinem kleinen Bespiel ersezte ich die Zeile mit "Debug.print" durch "Debug.print timer(),i" im Aktiven Workbook

Sub ersetzen()
    Modulname = "Tabelle1"
    With ActiveWorkbook.VBProject.VBComponents(Modulname).CodeModule
                 
        For i = 1 To .CountOfLines
            strng = .Lines(i, 1)
            If InStr(1, strng, "Debug.print", vbTextCompare) > 0 Then
                .ReplaceLine i, "Debug.print timer(),i"
                Exit For
            End If
        Next i
    End With
End Sub




Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 14.08.2020 10:07:49

Hallo Peterk
S U P E R !!! es geht!

Danke!

Jetzt habe ich noch ein kleines Problem. Vielleicht weißt du auch hier einen Rat.
ich öffnen den Schreibschutz mit

SendKeys "%{F11}%xi{TAB 9}" & "PW" & "{tab}{enter 2}%q"
Das geht ganz gut. Wenn ich aber die Datei innerhalb des Moduls mit Workbook.open öffne wird der Schreibschutz nicht aufgehoben. Das kann ich mir nicht erklären

Wie auch immer, notfalls muss ich halt händisch alle Mappen öffnen.

M.f.G.

Berny




M.f.G.

Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: peterk
Geschrieben am: 14.08.2020 10:19:32

Hallo

Warum verwendest Du nicht "Unprotect" bzw. "Protect". Beide Methoden sind sowohl auf WorkBook alsauch auf WorkSheet Ebene definiert (SendKeys ist die schlechteste aller Möglichkeiten)

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 14.08.2020 10:34:12

Hallo peterk,

sorry, dass ich schon wieder blöd nachfrage. Man kann das VB-Projekt mit "Unprotect" entsperren?
.VBProject.unprotect

geht bei mir nicht. wie muss ich die Eingabe richtig machen?

Gruß Berny

Betrifft: AW: VBA Code durch VBA korrigieren
von: peterk
Geschrieben am: 14.08.2020 11:14:00

Hallo

VBProject hat leider keine Protect/Unprotect Methode. Eine Lösung ohne SendKey

http://www.siddharthrout.com/index.php/2019/01/20/unprotect-vbproject-from-vb-code/

P.S: Du Musst "Ret = FindWindow(vbNullString, "VBAProject Password")" auf
Ret = FindWindow(vbNullString, "VBAProject Kennwort") ändern

Betrifft: AW: VBA Code durch VBA korrigieren
von: Berny
Geschrieben am: 14.08.2020 11:24:56

Hallo,

OK das ist interessant! aber im Moment zu stark für mich

Vielen herzlichen Dank nochmal und ein schönes Wochenende

Gruß Berny