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

问题描述:

我正在处理VBA模块以处理报价项目列表。我目前的错误是试图从报价清单中堆放全部或部分的东西,我试图找出如何跟踪它们。我可以根据其他变量动态创建变量吗?

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

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

有没有什么办法可以随时创建变量来跟踪各个订单项?例如,部署伪的斑点:

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

有没有什么办法让类似的东西的工作,还是有更好的方式来做到这一点?

+5

您不能使用动态名称创建变量。我建议看一下使用'Array'或'Collection' ......或者你总是可以创建自己的类来处理跟踪。 –

+1

您的报价清单是否会在相当长的时间内保持一致?如果是这样,你可以添加一张表格(如果你必须隐藏和/或保护),并在那里跟踪它们。您的程序会更新该列表,而不是每次重新导入报价项目。 如果您将其存储在命名区域中,或者更好地存储在表格中(例如4个表格:管道,板,梁,其他),您可以使用相当灵活的布局。 然后你可以决定你想要1行= 1报价项目还是1列= 1报价项目。如果这些项目具有属性,则可以将列名称用作“变量”。 –

+0

@Francky_V:不,每次运行都会是一个新的报价单。也就是说,目前工作簿中有模块可以从CRM 2015导出的文件中导入数字,然后将这些数字输出并输出到报表。尽管如此,将它们合并到隐藏工作表以进行详细计算的想法仍然有效。 –

我在班级有点粗略,我真的应该开始看着他们更因为他们是非常强大 - 这个链接会给你更多的信息: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 

注:在对于X环我创建的一个新实例每次上课。

现在只需等待具有更多课程编程经验的人员即可显示出更好的方法。 :)