макрос: копировать вставить ячейку, если условие выполнено - PullRequest
0 голосов
/ 01 октября 2018

Есть один шаг, который застрял, чтобы обновить номер запаса (столбец "D") в database_ gudang (запас в базе данных_ gudang добавляется к сумме квитанции (столбец "K") из form_penerimaan)

Обновление основано на имени элемента (nama barang), поэтому, если имя элемента (столбец «C») в form_penerimaan совпадает с именем элемента (столбец «B») вdatabase_ gudang, запас в database_ gudang будет обновлен.

, но есть проблема, которая обновляется только в строках 2,9,10 (желтая ячейка).Также следует обновить строку 3,4,5.

Большое спасибо за помощь.

С уважением.

Sub Module1()
    s = 10
    OT1 = Sheets("Database_Gudang").Cells(Rows.Count, "D").End(xlUp).Row

    For j = 2 To OT1
        NB1 = Sheets("Database_Gudang").Cells(j, "B").Value

        Sheets("Form_Penerimaan").Activate
        If Cells(s, "C").Value = NB1 And Cells(s, "C").Value <> "" Then
            Sheets("Form_Penerimaan").Cells(s, "Q").Copy

            Sheets("Database_Gudang").Activate
            Sheets("Database_Gudang").Cells(j, "G").Select
            Selection.PasteSpecial Paste:=xlPasteValues

            s = s + 1
        End If
    Next j
End Sub

enter image description here

1 Ответ

0 голосов
/ 01 октября 2018

Привет и добро пожаловать в stackoverflow:)

Избегайте использования .Select и .Activate.Непосредственно работать с переменными и объектами.Возможно, вы захотите увидеть Как избежать использования Select в Excel VBA

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

Isэто то, что вы пытаетесь?( UNTESTED )

Я прокомментировал код, чтобы у вас не возникло проблем с его пониманием.Если вы это сделаете, то поделитесь точным сообщением об ошибке, и мы возьмем его оттуда.

Sub Sample()
    Dim wsThis As Worksheet, wsThat As Worksheet
    Dim i As Long, j As Long
    Dim wsThisLRow As Long, wsThatLRow As Long

    '~~> Set your worksheets
    Set wsThis = ThisWorkbook.Sheets("Database_Gudang")
    Set wsThat = ThisWorkbook.Sheets("Form_Penerimaan")

    '~~> Find relevant last row in both sheets
    wsThisLRow = wsThis.Range("D" & wsThis.Rows.Count).End(xlUp).Row
    wsThatLRow = wsThat.Range("C" & wsThat.Rows.Count).End(xlUp).Row

    With wsThis
        '~~> Loop through cell in Database_Gudang
        For i = 2 To wsThisLRow
            '~~> Loop through cell in Form_Penerimaan
            For j = 10 To wsThatLRow
                '~~> Compare values and get values across if applicable
                If .Range("B" & i).Value = wsThat.Range("C" & j).Value Then
                    .Range("G" & i).Value = wsThat.Range("Q" & j).Value
                    Exit For
                End If
            Next j
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...