我可以根据其他变量动态创建变量吗?
问题描述:
我正在处理VBA模块以处理报价项目列表。我目前的错误是试图从报价清单中堆放全部或部分的东西,我试图找出如何跟踪它们。我可以根据其他变量动态创建变量吗?
项目列表没有一致的项目数量;一个可能是单个项目,另一个可能是一个。
为了选择使用哪种计算器逻辑,系统将货物分为四大类(管道,平板,横梁和其他)。
有没有什么办法可以随时创建变量来跟踪各个订单项?例如,部署伪的斑点:
Public Qty & "_" & Class & "-" & ClassCount As Integer
有没有什么办法让类似的东西的工作,还是有更好的方式来做到这一点?
答
我在班级有点粗略,我真的应该开始看着他们更因为他们是非常强大 - 这个链接会给你更多的信息: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环我创建的一个新实例每次上课。
现在只需等待具有更多课程编程经验的人员即可显示出更好的方法。 :)
您不能使用动态名称创建变量。我建议看一下使用'Array'或'Collection' ......或者你总是可以创建自己的类来处理跟踪。 –
您的报价清单是否会在相当长的时间内保持一致?如果是这样,你可以添加一张表格(如果你必须隐藏和/或保护),并在那里跟踪它们。您的程序会更新该列表,而不是每次重新导入报价项目。 如果您将其存储在命名区域中,或者更好地存储在表格中(例如4个表格:管道,板,梁,其他),您可以使用相当灵活的布局。 然后你可以决定你想要1行= 1报价项目还是1列= 1报价项目。如果这些项目具有属性,则可以将列名称用作“变量”。 –
@Francky_V:不,每次运行都会是一个新的报价单。也就是说,目前工作簿中有模块可以从CRM 2015导出的文件中导入数字,然后将这些数字输出并输出到报表。尽管如此,将它们合并到隐藏工作表以进行详细计算的想法仍然有效。 –