2013-03-11 67 views
2
Private Sub txtTotal1_Change() 
Dim Final As Integer 
If cbOldf_Change() Then 
    olf1 = cbOldf.ActiveCell.Offset(0, 1) 
    Final = oldf_col * quantity 
ElseIf cbHaribo1_Change() Then 
    haribo1 = cbHaribo1.ActiveCell.Offset(0, 1) + 1 
    Final = haribo_col * quantity 
ElseIf cbOldf_Change() = cbHaribo1_Change() Then 
    oldf_1 = cbOldf.ActiveCell.Offset(0, 1) + 1 
    haribo1 = cbHaribo1.ActiveCell.Offset(0, 1) + 1 
    Final = oldf_1 + haribo1 * quantity 
End If 
If txtQuantity1_Change() Then 
    txtTotal.Value = Final 
End Sub 

我是vba新手。我有两个单独的产品工作表(haribo和旧收藏夹)我有组合框来抓取这些工作表中的产品和一个输入数量的文本框。在产品工作表中,产品名称位于A列,价格位于B列。我想实现的目标是能够从组合框中选择产品名称,在文本框中输入数量并获得总价格进行计算,然后显示在“总计”文本框中。VBA电子表格列

我是新来的,所以请看看我可怕的代码,我给了它一个诚实的5个小时的努力,我现在在我的智慧结束!我会喜欢一些帮助或请指出正确的方向。

编辑:这是我的工作簿https://www.dropbox.com/s/49iym4exbcgmhcq/Main%20Page.xlsm 我这样做的大学,你可以通过看它

+1

如果你发布了一个示例文件(保管箱,skydrive等),那么我们会更容易帮你 – brettdj 2013-03-11 12:18:17

回答

1

尝试使用此代码猜设置总:

Private Sub SetTotal() 
    Dim dblTotal As Double 
    Dim dblQuantity As Double 
    If IsNumeric(Me.txtQuantity1) Then 
     dblQuantity = CDbl(Me.txtQuantity1) 
    End If 
    If cbHaribo1.Value <> "" Then 
     dblTotal = dblQuantity * GetPrice(Sheets("HARIBO").Range("A:B"), cbHaribo1.Value) 
    End If 

    If Me.cbOldf.Value <> "" Then 
     dblTotal = dblTotal + dblQuantity * GetPrice(Sheets("OLDFAVORITES").Range("A:B"), cbOldf.Value) 
    End If 
    Me.txtTotal1 = Format(dblTotal, "0.00") 
End Sub 

Private Function GetPrice(rng As Range, strProduct As String) As Double 
    On Error GoTo ErrorHandler 
    GetPrice = WorksheetFunction.VLookup(strProduct, rng, 2, False) 
    Exit Function 
ErrorHandler: 
    GetPrice = 0 
End Function 

要达到这种效果代码,你需要插入这些事件:

Private Sub cbHaribo1_Change() 
    SetTotal 
End Sub 
Private Sub cbOldf_Change() 
    SetTotal 
End Sub  
Private Sub txtQuantity1_Change() 
    SetTotal 
End Sub 

注意,形式有点暧昧 - 此刻的代码适用于量两者喀拉ibo和旧收藏夹。更好的是你可以尝试第二个数量字段 - 或者插入一个灰色的哈里波或旧的收藏夹选项框...

+1

谢谢,这真的帮助了我。我非常感谢,我可以从你的代码中学到很多东西(: – 2013-03-14 09:47:41