Hallo zusammen!
Ich bin dabei, mir ein Makro zu basteln, mit dem ich schnell die Performance von Bond Märkten
anschauen kann. Das Makro ist bereits mit der Finanzsoftware Bloomberg verknüpft und benutzt
2x grosse Datenabfragen.
Das funktioniert so: Ich sage, welche Daten ich möchte, und die Server von Bloomberg schicken mir
die Daten zurück. Alle Parameter sind richtig und beide Abfragen laufen EINZELND super!
Nun möchte ich das Ganze aber in einem grossen Modul haben und will also beide Abfragen hintereinander laufen haben. Wie kriege ich das hin? Momentan sieht der Sourcecode gut aus, bevor das jeweilige Sub zu Ende ist, wird schön aufs nächste verlinkt! Ich möchte doch eigentlich nur, dass VBA das Makro von oben bis unten liest!
Das Problem: Nach der zweiten Abfrage springt das Makro wieder ziemlich weit nach oben an, anstatt einfach mit dem dazugehörigen Empfangsteil weiterzumachen.
Schaut euch ruhig mal einen Teil vom Sourcecode an, vielleicht könnt ihr mir ja nen Rat geben!
Dankeschön!!
Carsten
' Die BB-Verbindung ist ein Objekt, das auch nach ende des Makros (Anfrage
' senden) erhalten bleibt,
' um bei Datenleiferung erneute Aktionen auslösen zu können.
Option Explicit
Public WithEvents bb_call As BLP_DATA_CTRLLib.BlpData
Public currencyamountA, zA As Integer
Dim CurrencyfieldA() As Variant
Public currencyamount, ReqCurrenciesAmount, sec, f, z, u, d As Integer
Public ReqFields
Public ReqCurrencies
Dim Erg(), ErgA(), ErgB(), ErgC(), Currencyfield(), Currencyoverview() As _
Variant
Dim my_date
Public Dat2
Sub Currencyabfrage()
Dim currencycookieA()
Dim i As Integer
Set bb_call = New BLP_DATA_CTRLLib.BlpData
Sheets("Currencies Neu").Select
Cells(1, 1).End(xlDown).Select
currencyamountA = Selection.Row - 1
ReDim currencycookieA(currencyamountA - 1)
ReDim CurrencyfieldA(currencyamountA - 1)
Sheets("Currencies Neu").Select
For i = 0 To currencyamountA - 1
CurrencyfieldA(i) = Cells(i + 2, 1).Value & " CURNCY"
currencycookieA(i) = i + 2
Next i
Dim Dat1A, Dat2A, Dat3A As String
Dim m As String
Dim t As String
Dim y As String
Dim K
Dim ZN, cookie As Long
Dim a As Variant
Dim d As Integer
Dat1A = Sheets("Liste").Cells(16, 2).Value
Dat3A = Sheets("Liste").Cells(16, 2).Value ' Ist eigentlich überflüssig,
' aber hilft die unnötigen Hochkommata in Dat2 zu entfernen.
Dat2A = Sheets("Liste").Cells(16, 3).Value
bb_call.AutoRelease = False
bb_call.SubscriptionMode = BySecurity
For i = 0 To currencyamountA - 1
For d = 0 To 1
With bb_call
.DisplayNonTradingDays = AllCalendar
.Periodicity = bbDaily
.NonTradingDayValue = PreviousDays
If d = 1 Then
ZN = currencycookieA(i) + currencyamountA
.GetHistoricalData CurrencyfieldA(i), ZN, "PX_Last", Dat2A, Dat2A
Else
.GetHistoricalData CurrencyfieldA(i), currencycookieA(i), "PX_Last", _
Dat1A, Dat1A
End If
End With
Next d
Next i
bb_call.Flush
i = 0
End Sub
Private Sub bb_call_Data(Security As Variant, cookie As Long, Fields As _
Variant, Data As Variant, Status As Long)
Dim i, K, c, j, p, b As Integer
Sheets("Currencies Neu").Select
Cells(cookie, 2) = Data(0, 1)
If u = currencyamountA * 2 Then
Set bb_call = Nothing
CurrencyBearbeitung
End If
u = u + 1
End Sub
Sub CurrencyBearbeitung()
Dim i As Integer
Sheets("Currencies Neu").Select
For i = 0 To currencyamountA - 1
Cells(i + 2, 10) = Cells(i + 2 + currencyamountA, 2) / Cells(i + 2, 2) _
' Berechnet die relative Veränderung. Datum 2 : Datum 1!
Next i
Dim Waehrung As Variant
Sheets("Currencies").Select
For i = 0 To sec - 1
'If Cells(i + 1, 3).Value = "USDEUR" Then
Waehrung = Cells(i + 1, 3).Value
Select Case Waehrung
Case "USDCHF"
Cells(i + 1, 4).Value = Cells(i + 1, 13)
End Select
Next i |