【问题标题】:Declaring Array in VBA class在 VBA 类中声明数组
【发布时间】:2016-01-19 22:45:23
【问题描述】:

我有几个课程,其中包含有关现场总机的详细信息。我正在使用 Userform 将数据存储在每个类中声明的变量中。我正在努力将数据存储在我的任何数组中。我是否以正确的方式声明这些变量?这是我的一个类的示例:

Dim pEquipID(3) As String
Dim pIr(3) As Integer
Dim pIm(3) As Integer
Dim pTripCurrent(3) As Integer
Dim pTripTime(3) As Integer
Dim pIsc(3) As Integer

Public Property Let EquipID(index As Integer, value As String)
    pEquipID(index) = value
End Property

Public Property Let Ir(index As Integer, value As Integer)
    pIr(index) = value
End Property

Public Property Let Im(index As Integer, value As Integer)
    pIm(index) = value
End Property

Public Property Let TripCurrent(index As Integer, value As Integer)
    pTripCurrent(index) = value
End Property

Public Property Let TripTime(index As Integer, value As Integer)
    pTripTime(index) = value
End Property

Public Property Let Isc(index As Integer, value As Integer)
    pIsc(index) = value
End Property

Public Property Get EquipID(index As Integer) As String
    EquipID(index) = pEquipID(index)
End Property

Public Property Get Ir(index As Integer) As Integer
    Ir(index) = pIr(index)
End Property

Public Property Get Im(index As Integer) As Integer
    Im(index) = pIm(index)
End Property

Public Property Get TripCurrent(index As Integer) As Integer
    TripCurrent(index) = pTripCurrent(index)
End Property

Public Property Get TripTime(index As Integer) As Integer
    TripTime(index) = pTripTime(index)
End Property

Public Property Get Isc(index As Integer) As Integer
    Isc(index) = pIsc(index)
End Property

这就是我存储数据的方式:

Private Sub Enter1_Click()
    'create class variables
    Dim Transformer1 As cTransformer
    Set Transformer1 = New cTransformer
    Dim Fuse1 As cFuse
    Set Fuse1 = New cFuse
    Dim CircuitBreaker1 As cCircuitBreaker
    Set CircuitBreaker1 = New cCircuitBreaker
    Dim Pump1 As cPump
    Set Pump1 = New cPump
    Dim Cable1 As cCable
    Set Cable1 = New cCable
'store circuit breaker entries
    CircuitBreaker1.EquipID(0) = CB1ID1.value
    CircuitBreaker1.EquipID(1) = CB2ID1.value
    CircuitBreaker1.Ir(0) = Cb1Ir1.value
    CircuitBreaker1.Ir(1) = CB2Ir1.value
    CircuitBreaker1.Im(0) = CB1Im1.value
    CircuitBreaker1.Im(1) = CB2Im1.value
    CircuitBreaker1.Isc(0) = CB1Isc1.value
    CircuitBreaker1.Isc(1) = CB2Isc1.value
    CircuitBreaker1.TripCurrent(0) = CB1trip1.value
    CircuitBreaker1.TripCurrent(1) = CB2trip1.value
    CircuitBreaker1.TripTime(0) = CB1time1.value
    CircuitBreaker1.TripTime(1) = CB2time1.value

当我 debug.print CircuitBreaker 数组时,终端会打印空白值。我使用这样的循环来打印每个数组:

        Dim count As integer
        For count = 0 To 1 Step 1
        Debug.Print CircuitBreaker1.EquipID(count)
        Next count

注意这个打印语句在 Enter1_click() 里面

【问题讨论】:

  • cb1/2 对象是什么?
  • 如果您包含用于打印值的代码会很有用
  • 现在包含打印代码
  • 我可以在 Locals 窗口中看到该值,但它会打印一个空字符串。 i.imgur.com/6Fg5GBv.png这是你正在经历的吗?
  • 我得到空字符串打印到即时窗口,我的本地窗口是空的。我只想检查这些数组是否存储了 TextBox 条目。我能够将条目存储在其他变量中并打印到即时窗口,只是在数组中挣扎

标签: arrays vba class


【解决方案1】:

您的属性获取不正确。而不是:

Public Property Get EquipID(index As Integer) As String
    EquipID(index) = pEquipID(index)
End Property

...应该是:

Public Property Get EquipID(index As Integer) As String
    EquipID = pEquipID(index)
End Property

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2016-12-09
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多