VBA: Schleife unterbrechen um ext. Daten zu laden
katharina
Die Ausgangslage ist die folgende:
Ich habe ein Spreadsheet. Im 1. Sheet ist eine Liste mit ISINs. Eine ISIN gehört zu einem (Finanz)Produkt.
In weiteren sheets stehen verschiedene Daten.
Dann gibt es ein Output sheet, das ich über die ISIN steuern kann, d.h. je nachdem welche ISIN ich auswähle werden verschiedene Daten, Charts etc im Output angezeigt.
Nun habe ich eine Schleife in einem Makro die folgendes macht:
Eine ISIN wird aus der Liste ausgewählt, dann in das Eingabefeld kopiert und das Output sheet wird als Pdf abgespeichert. Dann geht die Schleife zur nächsten ISIN in der Liste und macht das gleiche usw.
Das Makro funktioniert also im Prinzip folgendermassen: Schleife = ISIN kopieren --> Pdf erstellen
Das Makro funktioniert soweit, das Problem ist folgendes:
Die individuellen Daten greifen z.T. auf externe Quellen (namentlich: Bloomberg) zurück und es braucht immer einen Moment bis die Daten alle aufgebaut werden. Wenn ich manuell eine ISIN kopiere muss ich ca. 5 Sek warten bis alles richtig aufgebaut ist.
Ich habe versucht, diese 5 Sekunden Wartezeit auch in das Makro einzubauen (über Application.Wait). Das hat allerdings nicht funktioniert, weil auch wenn das Makro stillsteht, ist das Makro immer noch aktiv und kann nicht auf die externen Daten zugreifen.
Es muss irgendwie eine Lösung, in der man zeitweise aus dem Makro rausgeht. Ich habe mir das so gedacht, dass ich Makro1 habe, welches die ISIN kopiert und Makro2 welches den Output abspeichert.
Die Prozedur würde als jetzt so aussehen: ISIN kopieren (Makro1) --> Exit Makro --> nach 5 sek Wartezeit Output speichern (Makro2).
Mein Problem ist nun, das Ganze in eine Schleife zu packen, sprich ISIN1 kopieren --> Exit --> Output1 speichern --> ISIN2 kopieren --> Exit --> Output2 speichern etc.
Könnt ihr mir da weiterhelfen? Ich wäre überglücklich!!!
Mein ursprünglicher Code ist wie folgt:
Sub PrintAll()
Set InputRange = ActiveWorkbook.Worksheets("Cockpit").Range("B4:B100")
For Each cell In InputRange
If cell > 0 Then
'copy ISIN in Reporting sheet (A1) to generate Reporting
ActiveWorkbook.Worksheets("Reporting").Range("A1") = cell.Value
'Create File name
Dim SaveName As String
SaveName = ActiveWorkbook.Worksheets("Reporting").Range("A1").Value & "_" & _
ActiveWorkbook.Worksheets("Cockpit").Range("B2").Value & _
ActiveWorkbook.Worksheets("Cockpit").Range("C2").Value & ".pdf"
'Stop Macro to let all prices, charts etc build up
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
'save as PDF
ActiveWorkbook.Worksheets("Reporting").ExportAsFixedFormat Type:=xlTypePDF, _
FileName:= _
"G:\...\" _
& SaveName, Quality:=xlQualityStandard, IgnorePrintAreas:=False
End If
Next cell
End Sub