从VBA中的类模块中提取特定变量到标准模块

时间:2013-04-17 21:51:47

标签: excel vba excel-2010 bloomberg

全部, 以下代码来自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。我想在主模块中使用一个函数来识别变量。再次感谢。

1 个答案:

答案 0 :(得分:0)

在使用ReDim之前没有必要声明变量; ReDim可以声明一个变量。但是,如果您添加:

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

那么你可以通过以下方式引用它:

<YourClassVaraibleName>.Call_Sch