Hallo Peter,
eine Info vorweg: ich hab’ meine Makros mangels VBA-Kenntnisse bisher immer nur mittels Excel-Recorder zum Laufen gebracht, was beim VBA-Profi evtl. für große Erheiterung sorgt.
Hier nochmal die Aufgabenstellung, es geht um die Einrichtung eines Tools, mit dem ein Musterdepot von bis zu 50 Wertpapieren eingegeben und durch Auslösen eines Makros laufend aktualisiert werden kann. Dazu habe ich mehrere Arbeitsblätter eingerichtet:
Im 1. Blatt (ich nenn’s mal Frontend) können pro Zeile die einzelnen Titel und die gewünschte Stückzahl eingegeben werden (da mehrere Kollegen Zugriff haben, wird jedes Musterdepot später unter eigenem Namen abgespeichert, so dass die ursprüngliche Vorlage jungfräulich bleibt).
Im 2. Blatt hinterlege ich 50 Webabfragen, in denen die Kurse der gewünschten Aktien etc. erfragt werden (im konreten Fall über Comdirect). Durch Verknüpfung auf Blatt 1 bekomme ich so den aktuellen Kurs und den Gesamtwert pro Gattung.
Im 3. Blatt hab’ ich mittels „wenn-dann“-Funktionen den genauen Text für das Makro, das die Abfragen auslösen soll, hinterlegt. Beispiel: wenn Zeile 8=leer (weil das Musterdepot nur 7 Werte enthält), dann soll das Makro nur die Web-Abfragen 1 (im Feld A1), 2 (im Feld A101), 3 (im Feld A201) bis 7 (im Feld A601) aktualisieren (jede Webabfrage nimmt in Spalte A genau 100 Zeilen in Anspruch). Der Makrotext heisst also hier konkret:
Sub Kursaktualisierung()
’
’ Kursaktualisierung Makro
’ Makro am 31.07.2009 von Lolek aufgezeichnet
’
’
Sheets(„Kursverlinkung Comdirect“).Select
Range(„A1“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False
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
Range(„A501“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Range(„A601“).Select
Selection.QueryTable.Refresh BackgroundQuery:=False
End Sub
Da bei der Eingabe des nächsten Musterdepots dann vielleicht nur 5 oder gleich 34 Einzelwerte enthalten sein können, muss dafür auch die Anzahl der Webabfragen variierbar sein. Den jeweils benötigten Text liefert wie gesagt das 3. Arbeitsblatt und was ich brauche, ist ein weiteres Makro, das mir den fertigen Text in das bestehende Makro einsetzt.
Als VBA-Experte haust du Dich jetzt wohl weg vor Lachen, weils ganz leicht programmiert werden kann, aber ich bin nunmal nur ein kleiner Excelianer und da sucht man halt solche Umwege.
P.S.: ich kann dir die Datei natürlich auch schicken, aber sag’ bitte deutlich, wo Deine Hilfsbereitschaft endet.
Gruß Lolek