2013-03-11 13 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 или около того часов усилий, и теперь я нахожусь на своем пути! Мне хотелось бы помочь или указать в правильном направлении, пожалуйста.

EDIT: Вот моя книга https://www.dropbox.com/s/49iym4exbcgmhcq/Main%20Page.xlsm Я делаю это для колледжа, как вы можете догадаться, посмотрев на него

+1

Если вы разместите образец файла (dropbox, skydrive и т. Д.), То нам будет проще помочь вам – brettdj

ответ

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 

Обратите внимание, что форма является немного неоднозначным - в данный момент код относится к количеству обоим, Har ibo и Old Favorites. Лучше вы либо получите второе поле количества, либо вставьте поле выбора, которое выгружает Haribo или старые избранные ...

+1

Спасибо, это действительно помогло мне. Я очень благодарен, я могу многое узнать из вашего кода (: –

Смежные вопросы