Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
368to372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
368to372
368to372
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

WICHTIG: Makro ändern per Makro

WICHTIG: Makro ändern per Makro
22.01.2004 01:09:18
Jonathan
Liebe Excel Gurus!!!
Ich habe eine Frage:
ist es möglich einen bestimmten Code im VBProjekt per Makro zu ändern?
Bsp:
die

Sub
workbook_open beinhaltet den Code
Code1
code2
End Sub

nun möchte ich ein Makro ausführen, welches den Code ändert in:
Code 1.1
Code2
Code3

Vielen Dank für Eure Hilfe!
Jonathan

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: WICHTIG: Makro ändern per Makro
22.01.2004 01:44:16
PeterW
Hallo Jonathan,
bin zwar kein Guru aber gib bei www.google.de als Suchbegriff ein:
"makro per makro ändern" site:herber.de
Gruß
Peter
NOCH OFFEN
22.01.2004 01:53:08
jonathan
guten morgen Peter!
Hab ja schon im Archiv gesucht, es gibt auch Bsp, das Problem ist nur, dass ich von jemandem eine Schritt für Schritt Anweisung bräuchte, da ich mehrere Makros zu verändern habe und diese selber erstellen möchte......
Es wäre also super, wenn sich jemand melden würde, der mir dabei helfen würde!!!
Ich danke Euch schon mal!

Dank auch Dir, Peter!!!
Grüße
Jonathan
AW: NOCH IMMER OFFEN
23.11.2002 17:11:06
Hans W Hofmann
Hallo Jonathan,
ich hatte gehofft du wärest auf folgenden Beitrag gestoßen
--- snipp ---
Du bist gut beraten, die Finger von derartigen Konstruktionen zu lassen und andere, sichere, Weg zu gehen...
Selfmodifying Code ist das Übeleste was man so schreiben kann...
Gruß HW
--- snap ---
Davon abgesehen wird VBA keine Sub mit dem Namen Code1.1 akzeptieren.
Bin selber auch gespannt, wie die wahren Gurus das lösen werden.
Gruß
Peter
Anzeige
AW: NOCH IMMER OFFEN
22.01.2004 23:23:02
Nepumuk
Hallo Jonathan,
Peter hat schon Recht, ein Punkt verstößt gegen die Namenkonvention. Aber der Rest ist kein Problem. Aber ein bisschen mehr Information wäre schon hilfreich. Weißt du z.B. die genaue Zeilennummer der zu ändernden Zeilen oder soll sich das Programm diese suchen? Soll sich das Programm die Mappen selbst öffnen? usw. usw.
Gruß
Nepumuk
AW: NOCH IMMER OFFEN
22.01.2004 23:49:14
Jonathan
Hoffe, er wird noch gelesen?!!
Hallo Ihr Gurus!! :-)
Also, folgendes:
ich habe mitlerweile ein sehr umfangreiches "Programm" geschrieben, welches geändert werden muss. Es besteht aus ca 50 Dateien, welche eigentlich den selben Code haben. Nun muss in jeder Datei eine bestimmte Sub geändert werden.
ich weiß nicht, welche Varianten möglich sind - Nepumuk fragte, ob die Dateien geöffnet werden sollen - müssen sie das dafür?
Sagen wir, die Sub workbook_open muss geändert werden.
Der Code besteht aus ca 100 Zeilen. Die Zeilen müssen verändert werden, gelöscht oder erweitert.
Da wäre es doch am besten, wenn man sagen könnte, komplette Sub durch diese ersetzen......
Das wäre so die idee, welche ich hatte.
Von daher sollte das dann wie folgt vorgehen:
bestimmte Dateien öffnen, den Code der angegebenen Sub ersetzen, Datei speichern, Datei schließen. und die nächste Datei..... usw......

Bin gespannt!!!!
Liebe Grüße
Jonathan
Anzeige
AW: NOCH IMMER OFFEN
23.01.2004 17:46:24
Nepumuk
Hallo Jonathan,
ein Beispielcode:
Du musst in der Mappe zwei Verweise setzen.
1. Microsoft Visual Basic for Applications Extesibility 5.3
2. Microsoft Scripting Runtime
Folgenden Code in Modul1, den Code, der den alten ersetzen soll, in Modul2.

Option Explicit
Public Sub Dateien_suchen()
Dim myFileSystemObject As New FileSystemObject, myFile As File, myFileSearch As FileSearch
Dim lngIndex As Long
Application.ScreenUpdating = False
Set myFileSearch = Application.FileSearch
With myFileSearch
.LookIn = "D:\Eigene Dateien\Eigene Testmappen" 'Pfad anpassen
.FileType = msoFileTypeExcelWorkbooks
.Execute
For lngIndex = 1 To .FoundFiles.Count
Set myFile = myFileSystemObject.GetFile(.FoundFiles(lngIndex))
If myFileSystemObject.FileExists(.FoundFiles(lngIndex)) Then
If myFile.Name <> ThisWorkbook.Name Then
Application.EnableEvents = False
Workbooks.Open .FoundFiles(lngIndex)
Application.EnableEvents = True
Call Modulexport(myFile.Name)
Workbooks(myFile.Name).Close SaveChanges:=True
End If
End If
Next
End With
Set myFileSearch = Nothing
Application.ScreenUpdating = True
End Sub
Private Sub Modulexport(strDateiname)
Dim myExportVBP As VBProject, myVBComponents As Object
Set myExportVBP = ThisWorkbook.VBProject
With Workbooks(strDateiname).VBProject
For Each myVBComponents In .VBComponents
With myVBComponents
If .Type = 100 And .Name = Workbooks(strDateiname).CodeName Then
With .CodeModule
.DeleteLines 1, .CountOfLines
.InsertLines 1, myExportVBP.VBComponents("Modul2").CodeModule.Lines(1, myExportVBP.VBComponents("Modul2").CodeModule.CountOfLines)
End With
Exit For
End If
End With
Next
End With
Set myExportVBP = Nothing
End Sub


Code eingefügt mit: Excel Code Jeanie
Jetzt nur noch den Pfad (siehe Kommentar) anpassen und das Programm tauscht bei allen Excelmappen, in dem von dir vorgegebenen Ordner, den Code von "DieseArbeitsmappe" mit dem von Modul2, der neu erstellten Mappe mit meinem Programm, aus.
Gruß
Nepumuk
Anzeige
AW: NOCH IMMER OFFEN
24.01.2004 16:00:43
Jonathan
Hallo Nepumuk!!!
Damit hätt ich ja nicht gerechnet!! :-)
aber natürlich die erste Frage:
was bedeutet das mit den Verweisen? wie setze ich diese? wofür dienen die?
Hab ich noch nie gehört!!!
Vielen dank
Jonathan
AW: In Bearbeitung
24.01.2004 16:40:58
Nepumuk
Hallo Jonathan,
im VBA-Editor - Menüleiste - Extras - Verweise dann in der Liste die Verweise suchen und ein Häkchen rein. Diese liefern Bibliotheken, die im Programm benötigt werden.
Gruß
Nepumuk
AW: NOCH IMMER OFFEN
24.01.2004 16:04:00
Jonathan
und direkt die nächste Frage:
kann ich dieseArbeitsmappe ganz einfach anpassen?
Dafür lautet ja der Code:
Set myExportVBP = ThisWorkbook.VBProject
kann ich da dann einfach reinschreiben:
Set myExportVBP = SubXY.VBProject
wenn die zu ersetzende Sub XY heißt?
Oder wie würde das dann aussehen?
Jonathan
Anzeige
AW: In Bearbeitung
24.01.2004 16:48:05
Nepumuk

Hallo Jonathan,
in myExportVBP ist der Objektverweis auf die Mappe die das neue Programm enthält. Ich versteh deine Frage nicht ganz, kannst du die mal neu formulieren?
Gruß
Nepumuk


AW: In Bearbeitung
24.01.2004 17:00:05
Jonathan
Also, in deinem Programm wird ja der komplette Code für
dieseArbeitsmappe
ersetzt.
Wenn ich nun nicht den Code von
dieseArbeitsmappe
ersetzen will, sondern den einer Sub mit dem Namen
Sub XY??
Welchen Teil Deines Programmes muss ich anpassen?
Ich dachte, es wäre der eben genannte.......
Habs gerade ausprobiert:
Einfach geil!!!!!!!! Klappt suuuuper! (war aber auch nicht anders zu erwarten!!!) :-)
Was meisnt du, íst bei dem Ausführen eine Absturzwahrscheinlichkeit bei vielen Dateien und großen Codes gegeben?
Jonathan
Anzeige
AW: In Bearbeitung
24.01.2004 17:12:45
Nepumuk
Hallo Jonathan,
jetzt hab ich verstanden. Das ist nicht ganz so einfach. Da benötigst du ein anderes Programm. Eines, das sich die Sub sucht, von der ersten bis zur letzten Zeile löscht und eine neue einfügt. Wenn ich lustig bin, dann mach ich es dir heute noch, aber jetzt bin ich erst mal durstig.
Abstürzen kann es wegen der Dateigröße (meine größte Excelmappe hat über 130MB) oder Länge des Codes (da dürfte mein größtes Projekt ca. 10.000 Programmzeilen haben) kaum. Nur der Filesearch macht ab 50.000 gefundenen Dateien schlapp.
Gruß
Nepumuk
AW: In Bearbeitung
24.01.2004 19:24:18
Jonathan
Dann hofe ich mal, dass Du noch lustig wrst!! :-)
ist es möglich, während des Ausführens Deines Programmes so etwas wie eine statusleiste ablaufen zu lassen, oder irgendwas, was anzeigt, dass noch gearbeitet wird......

liebe Grüße
Jonathan
Anzeige
AW: In Bearbeitung
25.01.2004 10:02:36
Nepumuk
Hallo Jonathan,
weil noch eine Userform drin ist, bekommst du die ganze Mappe:
https://www.herber.de/bbs/user/3191.xls
Der Ablauf ist der selbe. Expotiert wird der Code von Modul2.
Gruß
Nepumuk
AW: In Bearbeitung
25.01.2004 00:10:37
Jonathan
ich schon wieder....., hoffe, ich nerve nicht mit meinen ERgänzungen.
Mir fällt nur immer wieder was neues ein!!!
und zwar:
in dem bisherigen Programm von Dir gebe ich einen Ordner an, alle in diesem Ordner bestehende Dateien werden dann ersetzt (den Code mein ich). Ist es möglich, dort noch eine Bedingung mit ein zu binden?
Und zwar:
ich habe ganz viele Dateien, welche mit "Monate Mitarbeiter....." beginnen. Der REst des Dateinamens ist unterschiedlich. (Er würde zB so weitergehen : "Monate Mitarbeiter A 04"). In dem Ordner befinden sich aber nicht nur diese Dateien, sondern auch andere. Aber es sollen nur diese geändert werden. Ist es daher möglich, anzugeben, dass alle Dateien die mit "Monate Mitarbeiter" beginnen geändert werden sollen?
Wenn du mir wirklich das neue Prog schreibst, kannst Du es darin aufnehmen?
Und wäre natürlich super, wenn Du es auch in dem mir schon gegebenen Code ändern würdest......

Hey, hab nen bißchen schlechtes Gewissen, weil ich immer direkt so viel verlange!!!

Vielen Dank, Nepumuk!!!
Liebe Grüße
Jonathan
Anzeige
AW: In Bearbeitung
25.01.2004 12:27:59
Jonathan
Hallo Jonathan,
füge folgende Zeile ein:

Betrifft: AW: In Bearbeitung
Hallo Nepumuk!!
Vielen Dank schon mal hierfür!!

Liebe Grüße
Jonathan
AW: In Bearbeitung
25.01.2004 12:27:59
Jonathan
Hallo Nepumuk!!
Vielen Dank schon mal hierfür!!

Liebe Grüße
Jonathan
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige