2015-12-21 134 views
1

我正在處理VBA模塊以處理報價項目列表。我目前的錯誤是試圖從報價清單中堆放全部或部分的東西,我試圖找出如何跟蹤它們。我可以根據其他變量動態創建變量嗎?

項目列表沒有一致的項目數量;一個可能是單個項目,另一個可能是一個。

爲了選擇使用哪種計算器邏輯,系統將貨物分爲四大類(管道,平板,橫樑和其他)。

有沒有什麼辦法可以隨時創建變量來跟蹤各個訂單項?例如,部署僞的斑點:

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

有沒有什麼辦法讓類似的東西的工作,還是有更好的方式來做到這一點?

+5

您不能使用動態名稱創建變量。我建議看一下使用'Array'或'Collection' ......或者你總是可以創建自己的類來處理跟蹤。 –

+1

您的報價清單是否會在相當長的時間內保持一致?如果是這樣,你可以添加一張表格(如果你必須隱藏和/或保護),並在那裏跟蹤它們。您的程序會更新該列表,而不是每次重新導入報價項目。 如果您將其存儲在命名區域中,或者更好地存儲在表格中(例如4個表格:管道,板,梁,其他),您可以使用相當靈活的佈局。 然後你可以決定你想要1行= 1報價項目還是1列= 1報價項目。如果這些項目具有屬性,則可以將列名稱用作「變量」。 –

+0

@Francky_V:不,每次運行都會是一個新的報價單。也就是說,目前工作簿中有模塊可以從CRM 2015導出的文件中導入數字,然後將這些數字輸出並輸出到報表。儘管如此,將它們合併到隱藏工作表以進行詳細計算的想法仍然有效。 –

回答

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 

注:在對於X環我創建的一個新實例每次上課。

現在只需等待具有更多課程編程經驗的人員即可顯示出更好的方法。 :)