Проблема Excel VBA, когда элемент уже зарегистрирован в листе, только сумма - PullRequest
0 голосов
/ 27 февраля 2019

так что я хочу, чтобы, когда пользователь добавляет продукт, который уже зарегистрирован в листе, добавляется количество этого продукта, а не новая строка.это код, который я уже сделал, но проблема с этим кодом в том, что система не входит в цикл if и поэтому снова добавляет новые строки.

это образец: excel image

код:

Private Sub btnSubmit_Click()
Sheet2.Activate
Dim lastRow2 As Long
lastRow2 = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1
Set rng2 = Worksheets("Sheet2").Range("B2:B" & lastRow2)
For Each cell2 In rng2
    If cell2 = tbTipe.Text + " " + "(" + tbColor.Text + ")" + " " + "-" + " " + tbProduct.Text Then
         cell2.Offset(0, 1) = cell2.Offset(0, 1) + tbQty.Value
    Else
        Sheets("Sheet2").Range("A" & lastRow2).Value = CDate(tbDate)
        Sheets("Sheet2").Range("B" & lastRow2).Value = UCase(tbTipe.Text + " " + "(" + tbColor.Text + ")" + " " + "-" + " " + tbProduct.Text)
        Sheets("Sheet2").Range("C" & lastRow2).Value = tbQty.Value
        Sheets("Sheet2").Range("D" & lastRow2).Value = tbPrice.Value
    End If
Next cell2
End Sub


Private Sub UserForm_Initialize()
tbDate.Value = Date
tbProduct.Value = ""
tbQty.Value = ""
tbPrice.Value = ""
tbTipe.Value = ""
tbColor.Value = ""
End Sub

1 Ответ

0 голосов
/ 27 февраля 2019

Создайте строку продукта и найдите ее в столбце B. Если найдено, добавьте количество в столбец C;если нет, добавьте новую строку со всей информацией.

Private Sub btnSubmit_Click()

    Dim lastRow2 As Long, m as variant, str as string

    with workSheets("Sheet2")

        .Activate

        str = UCase(tbTipe.Text & " (" & tbColor.Text & ") - " & tbProduct.Text)

        m = application.match(str, .range("B:B"), 0)

        if not iserror(m) then
            .Range("C" & m).Value = .Range("C" & m).Value + val(tbQty.Value)
        else
            lastRow2 = .Range("A" & Rows.Count).End(xlUp).Row + 1
            .Range("A" & lastRow2).Value = CDate(tbDate)
            .Range("B" & lastRow2).Value = str
            .Range("C" & lastRow2).Value = val(tbQty.Value)
            .Range("D" & lastRow2).Value = val(tbPrice.Value)
        End If
    Next cell2

End Sub

Символом конкатенации строк в VBA является амперсанд ( & ), а не знак плюс ( + ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...