2

すべて、次のコードは Bloomberg からのものです。サーバーから大量のデータを抽出するように設計されています。コードは機能しますが、クラス モジュールで生成された特定の変数を抽出し、それをユーザー定義関数の標準モジュールに持ち込もうとしています。助けてくれてありがとう。

Option Explicit
Private WithEvents session As blpapicomLib2.session
Dim refdataservice As blpapicomLib2.Service

Private Sub Class_Initialize()
Set session = New blpapicomLib2.session
session.QueueEvents = True
session.Start
session.OpenService ("//blp/refdata")
Set refdataservice = session.GetService("//blp/refdata")
End Sub

Public Sub MakeRequest(sSecList As String)
Dim sFldList As Variant
Dim req As Request
Dim nRow As Long
sFldList = "CALL_SCHEDULE"
Set req = refdataservice.CreateRequest("ReferenceDataRequest") 'request type
req.GetElement("securities").AppendValue (sSecList) 'security + field as string array
req.GetElement("fields").AppendValue (sFldList) 'field as string var
Dim cid As blpapicomLib2.CorrelationId
Set cid = session.SendRequest(req)
End Sub

Public Sub session_ProcessEvent(ByVal obj As Object)
Dim eventObj As blpapicomLib2.Event
Set eventObj = obj
If Application.Ready Then
    If eventObj.EventType = PARTIAL_RESPONSE Or eventObj.EventType = RESPONSE Then
        Dim it As blpapicomLib2.MessageIterator
        Set it = eventObj.CreateMessageIterator()
        Do While it.Next()
            Dim msg As Message
            Set msg = it.Message
                Dim Security As Element
                Set Security = msg.GetElement("securityData").GetValue(0)
                Sheet1.Cells(4, 4).Value = Security.GetElement("security").Value
                Dim fieldArray As Element
                Set fieldArray = Security.GetElement("fieldData")
                    Dim field As blpapicomLib2.Element
                    Set field = fieldArray.GetElement(0)
                    If field.DataType = 15 Then
                        Dim numBulkValues As Long
                        numBulkValues = field.NumValues '76
                        Dim index As Long
                        For index = 0 To numBulkValues - 1
                            Dim bulkElement As blpapicomLib2.Element
                            Set bulkElement = field.GetValue(index)
                            Dim numBulkElements As Integer
                            numBulkElements = bulkElement.NumElements '2 elements per each pt
                            ReDim Call_Sch(0 To numBulkValues - 1, 0 To numBulkElements - 1) As Variant
                            Dim ind2 As Long
                            For ind2 = 0 To numBulkElements - 1
                                Dim elem As blpapicomLib2.Element
                                Set elem = bulkElement.GetElement(ind2)
                                Call_Sch(index,ind2)=elem.Value
                                Sheet1.Cells(index + 4, ind2 + 5) = elem.Value
                            Next ind2
                        Next index
                    Else
                    Call_Sch(index,ind2)=field.Value    
                    Sheet1.Cells(index + 4, ind2 + 5).Value = field.Value
                    End If
        Loop
    End If
End If
End Sub

具体的には、取得しようとしている変数は Call_Sch です。メインモジュールの関数に変数を認識させたい。再度、感謝します。

4

1 に答える 1

0

ReDim を使用する前に変数を宣言する必要はありません。ReDim は変数を宣言できます。ただし、追加した場合:

Public Call_Sch() as Variant ' Insert correct data type here

次に、次の方法で参照できます。

<YourClassVaraibleName>.Call_Sch 
于 2013-07-22T02:15:40.903 に答える