2013-04-17 32 views
2

全部, 以下代碼來自Bloomberg。它旨在從服務器提取批量數據。代碼有效,但我試圖提取在類模塊中生成的特定變量,並將其帶到用戶定義函數的常規模塊中。謝謝您的幫助。從VBA中的類模塊提取特定變量到標準模塊

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。我想要一個主模塊中的函數來識別變量。再次感謝。

+2

要在一類外部可見的值,你把它的屬性,如本例:http://stackoverflow.com/questions/5342666/vba-array-of-variant-type-as-class-property或者你可以公開你的數組。但看起來你並沒有發佈所有的代碼,因爲沒有任何代碼聲明'Call_Sch'在任何地方 - 只有ReDim的。 –

回答

0

在使用ReDim之前不需要聲明變量; ReDim可以聲明一個變量。但是,如果你說:

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

那麼你就可以通過引用它:

<YourClassVaraibleName>.Call_Sch