мое гнездо для не работает? значение не будет скопировано (VBA, Looping, Использование вложенного для копирования данных) - PullRequest
0 голосов
/ 21 января 2019

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

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

ты знаешь как это решить? я пропустил какой-то синтаксис? Большое спасибо!

lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "B").End(xlUp).Row
'b value is more than 30.000 data
b = wsDestI.Cells(wsDestI.Rows.Count, "G").End(xlUp).Row

For i = 1 To lCopyLastRow
If IsEmpty(wsCopy.Range("E" & 9 + i).Value) = True Then
    'this nested for is not working, it wont copy the data
    For s = 4 To b
        If (wsCopy.Range("B" & 9 + i).Value = wsDestI.Range("G" & s).Value) Then
            wsDestI.Range("C" & s).copy wsDest.Range("M" & Rows.Count).End(xlUp).Offset(1, 0)
            wsDestI.Range("G" & s).copy wsDest.Range("S" & Rows.Count).End(xlUp).Offset(1, 0)
            wsDestI.Range("M" & s).copy wsDest.Range("P" & Rows.Count).End(xlUp).Offset(1, 0)
        End If
    Next s
ElseIf IsEmpty(wsCopy.Range("B" & 9 + i).Value) = True Then
        wsCopy.Range("E" & i + 9).copy wsDest.Range("M" & Rows.Count).End(xlUp).Offset(1, 0)
        wsCopy.Range("K" & 9 + i).copy wsDest.Range("P" & Rows.Count).End(xlUp).Offset(1, 0)
        wsDest.Range("S" & Rows.Count).End(xlUp).Offset(1, 0) = "0"
Else:
wsCopy.Activate
wsDest.Activate
wsCopy.Range("E" & 9 + i).copy wsDest.Range("M" & Rows.Count).End(xlUp).Offset(1, 0)
wsCopy.Range("B" & 9 + i).copy wsDest.Range("S" & Rows.Count).End(xlUp).Offset(1, 0)
wsCopy.Range("K" & 9 + i).copy wsDest.Range("P" & Rows.Count).End(xlUp).Offset(1, 0)
End If
Next i

1 Ответ

0 голосов
/ 22 января 2019

Попробуйте - я исправил некоторые из ваших синтаксисов и полностью квалифицировал все Rows.Count s.Я также сделал некоторые дополнительные вещи, такие как удаление этих Activate строк (ненужных), изменил ваш цикл i, чтобы он начинался с 10 (поскольку вы все равно просто добавляете к нему 9 везде), и добавил все объявления / наборы, которые вы не использовали.т отображается в вашем сообщении.

Option Explicit
Sub Test()

    Dim lCopyLastRow As Long, b As Long, i As Long, s As Long
    Dim wsCopy As Worksheet, wsDestI As Worksheet, wsDest As Worksheet

    Set wsCopy = ThisWorkbook.Worksheets("wsCopy")
    Set wsDestI = ThisWorkbook.Worksheets("wsDestI")
    Set wsDest = ThisWorkbook.Worksheets("wsDest")

    lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "B").End(xlUp).Row
    b = wsDestI.Cells(wsDestI.Rows.Count, "G").End(xlUp).Row

    For i = 10 To lCopyLastRow

        If IsEmpty(wsCopy.Range("E" & i).Value) = True Then

            For s = 4 To b

                If (wsCopy.Range("B" & i).Value = wsDestI.Range("G" & s).Value) Then
                    wsDestI.Range("C" & s).Copy wsDest.Range("M" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
                    wsDestI.Range("G" & s).Copy wsDest.Range("S" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
                    wsDestI.Range("M" & s).Copy wsDest.Range("P" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
                End If

            Next s

        ElseIf IsEmpty(wsCopy.Range("B" & i).Value) = True Then

            wsCopy.Range("E" & 9 + i).Copy wsDest.Range("M" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
            wsCopy.Range("K" & 9 + i).Copy wsDest.Range("P" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
            wsDest.Range("S" & wsDest.Rows.Count).End(xlUp).Offset(1, 0) = 0

        Else

            wsCopy.Range("E" & i).Copy wsDest.Range("M" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
            wsCopy.Range("B" & i).Copy wsDest.Range("S" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)
            wsCopy.Range("K" & i).Copy wsDest.Range("P" & wsDest.Rows.Count).End(xlUp).Offset(1, 0)

        End If

    Next i

End Sub
...