我可以根据其他变量动态创建变量吗?

时间:2015-12-21 14:09:17

标签: excel vba excel-vba

我正在开发一个VBA模块来处理报价项目列表。我当前的目标是尝试从引用列表中堆叠全部或部分内容,我正试图弄清楚如何跟踪它们。

项目列表没有一致数量的项目;一个可能是一个项目,另一个可能是一百个。

系统将货物分为四大类(管道,板,梁和其他),以便选择使用哪种计算器逻辑。

有没有办法动态创建变量来跟踪各个订单项?例如,部署一个伪代码点:

Public Qty & "_" & Class & "-" & ClassCount As Integer

有没有办法让这样的工作成功,或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我在课堂上有点粗略,我真的应该开始更多地看待它们,因为它们非常强大 - 这个链接会给你更多信息:http://www.cpearson.com/excel/classes.aspx

扩展Jasons评论这是建立课程的一种方式,我确信有更好的方法: 将类模块添加到项目中并将模块命名为cls_Quote 将此代码添加到类模块:

Option Explicit

Private sQuote As String
Private lQuantity As Long
Private lAnotherValue As Long

Public Property Let Quote(Value As String)
    sQuote = Value
End Property
Public Property Get Quote() As String
    Quote = sQuote
End Property

Public Property Let Quantity(Value As Long)
    lQuantity = Value
End Property
Public Property Get Quantity() As Long
    Quantity = lQuantity
End Property

Public Property Let AnotherValue(Value As Long)
    lAnotherValue = Value
End Property

在普通模块中添加以下代码:

Option Explicit

Private MyQuotes As Collection

Public Sub Test()

    Dim MyNewQuote As cls_Quote
    Dim x As Long
    Dim vIQuote As Variant
    Dim FinalSum As Long

    Set MyQuotes = New Collection

    For x = 1 To 10
        Set MyNewQuote = New cls_Quote
        With MyNewQuote
            .Quantity = x
            .Quote = "Pipes"
            .AnotherValue = x * 5
        End With
        MyQuotes.Add MyNewQuote
    Next x

    For Each vIQuote In MyQuotes
        If vIQuote.Quote = "Pipes" Then
            FinalSum = FinalSum + vIQuote.Quantity
        End If
    Next vIQuote

    MsgBox "Total sum of Pipes is: " & FinalSum

End Sub

注意:在For x循环中,我每次都要创建一个新的类实例。

现在只需等待具有更多类编程经验的人来展示更好的方法。 :)