Inhalt eines Makros per Makro anpassen

Hallo zusammen,

ich bin komplett neu bei w-w-w und starte hier meine erste Anfrage:

Ich habe im Excel eine Datei eingerichtet zur Erstellung einer Wertpapierwatchlist mit bis zu 50 Werten. Dazu habe ich in einem gesonderten Arbeitsblatt 50 Web-Abfragen importiert, um die aktuellen Kurse der in der Watchlist hinterlegten Titel abzurufen. Diese Abfragen sollen bei Bedarf per Makro aktualisiert werden.

Hier das Makro auszugsweise (geht so weiter bis zum 50. Wert):
Range(„A101“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False Range(„A201“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False Range(„A301“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False Range(„A401“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False

Um mit dem Makro nur die tatsächlich benötigte Anzahl von Kursabfragen anzustossen (wenn die Watchlist nur 10 Titel enthält, brauchen ja nicht die leeren Webabfragen 11 bis 50 aktualisiert werden), lasse ich in einem weiteren Arbeitsblatt den Textinhalt für das Makro klartextlich erscheinen (sinngemäss „wenn Zeile 1 mit einem Wertpapier belegt ist, dann soll die Webabfrage in Feld A101 aktualisiert werden usw.“) und suche nun nach einer Möglichkeit, diesen Text automatisch (also z.B. per weiteres Makro) in das bestehende Makro einzufügen.

Zusammengefasst: wie kann ich den Inhalt eines Makros mittels eines anderen Makros verändern?

Danke vorab, Gruß Lolek

Zusammengefasst: wie kann ich den Inhalt eines Makros mittels
eines anderen Makros verändern?

Hallo Lolek,

nachfolgend sind zwei Codes.
Die erste Prozedur erzeugt in Moudul1 eine prozedur.
Die zweite löscht die grad erzeugte prozedur wieder.

Du mußt dazu den Verweis auf
Microsoft Visual Basic For Applications Extensibility 5.3
sezten (Extras–Verweise im Editor)
Ein Standardmodul namens „Modul1“ muß existieren.

Neben .deletelines… und .insertlines… gibt es noch .replacelines…

Du kannst also in einem Modul Codezeilen einfügen, löschen und austauschen.

Irgendwo aus dem Inet gefischt:

Sub ProzedurErzeugen()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long
Const DQUOTE = """" ' one " character
Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents("Modul1")
Set CodeMod = VBComp.CodeModule
With CodeMod
 LineNum = .CountOfLines + 1
 .InsertLines LineNum, "Public Sub SayHello()"
 LineNum = LineNum + 1
 .InsertLines LineNum, " MsgBox " & DQUOTE & "Hello World" & DQUOTE
 LineNum = LineNum + 1
 .InsertLines LineNum, "End Sub"
End With
End Sub
'
Sub ProzedurLoeschen()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim StartLine As Long
Dim NumLines As Long
Dim ProcName As String
Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents("Modul1")
Set CodeMod = VBComp.CodeModule
ProcName = "SayHello"
With CodeMod
 StartLine = .ProcStartLine(ProcName, vbext\_pk\_Proc)
 NumLines = .ProcCountLines(ProcName, vbext\_pk\_Proc)
 .DeleteLines StartLine:=StartLine, Count:=NumLines
End With
End Sub

Gruß
Reinhard

Hallo Reinhard,

anhand Deiner Antwort stelle ich fest, dass ich wohl im falschen Brett (VBA) unterwegs bin. Ich habe zwar schon zig’ Makros erfolgreich zum laufen gebracht, aber ohne VBA-Vorkenntnisse und nur aus dem Blickwinkel eines normalen Excel-Users. Solltest Du mir auf dem Niveau trotzdem weiterhelfen können, wäre das super.

Hier nochmal mein Problem in anderen Worten: mein Makro muss lauten: 1. Text kopieren (der enthält dann die Anzahl der benötigten Web-Aktualisierungen, siehe mein Muster aus der Ursprungsanfrage) 2. Bestehendes anderes Makro x öffnen 3. Dessen bisherigen Inhalt durch kopierten Text überschreiben 4. Makro x mit neuem Text ausführen.

Gruß Lolek

Hallo Lolek,

anhand Deiner Antwort stelle ich fest, dass ich wohl im
falschen Brett (VBA) unterwegs bin.

? Du wolltest doch etwas in Excel-vab wissen? *Irritiert schau*

Ich habe zwar schon zig’
Makros erfolgreich zum laufen gebracht,

Schön. Und wie ist es mit meinen beiden Makros?
Was klappte, was nicht? Bei fehlern, welche, in welcher Codezeile?
Welche Excelversion hast du?

Solltest Du mir auf dem Niveau trotzdem
weiterhelfen können, wäre das super.

Das liegt an uns beiden :smile:

Wo hängt es bei meinen Makros um sie erstmal nur zu testen?
Wie man ein Modul einfügt?
Wie man dies, jenes macht? Sag mir das dann kann ich oder auch rainer sgaen wie es geht.

Hier nochmal mein Problem in anderen Worten: mein Makro muss
lauten: 1. Text kopieren (der enthält dann die Anzahl der
benötigten Web-Aktualisierungen, siehe mein Muster aus der
Ursprungsanfrage) 2. Bestehendes anderes Makro x öffnen 3.
Dessen bisherigen Inhalt durch kopierten Text überschreiben
4. Makro x mit neuem Text ausführen.

Sieht lösbar aus.
Meine beiden makros sollten dir erstmal nur die Möglichkeiten auzeigen mit denen du zur Laufzeit bestehenden Modulinhalt manipulieren kannst.
Mit den kenntnissen aus den beiden Codes kann man wenn man weiß wie 2) und3) lösen.
4) ist ja wohl nur ein einzeiliger Call Aufruf, wird in der Vba-Hilfe erklärt was Call ist.

  1. kann man m.E. mit verschiedenen Ansätzen lösen, liegt daran wie man es in 3) einbindet.

Und erst wenn du meine beiden Makros vielleicht nicht ganz durchschaut hast, aber sie benutzen kannst, kann ich dir was basteln was dann genau auf dein Problem eingeht.
Sonst bringt das nix.

Damit wir beide von der gleichen Basis reden, lade mal eine Beispielmappe hoch mit FAQ:2606

Gruß
Reinhard