Код VBA работает только тогда, когда я запускаю его пошагово(F8)

#excel #vba

Вопрос:

У меня есть код, который отлично работает, нажимая клавишу F8 (запуск шаг за шагом). Однако он не работает при нажатии клавиши F5(ее запуске). Я думаю, это потому, что мой код как бы в цикле, но я не мог понять, что не так.

 Sub BLKReport()

Dim IRow As Long
Dim lcntr As Long

Dim ws As Worksheet
Dim ws1 As Worksheet
Dim b As Long
Dim r As String
Dim i As Long

Set ws = ThisWorkbook.Worksheets("CSV File")
Set ws1 = ThisWorkbook.Worksheets("Destination")

lrow = Range("A2").End(xlDown).Row
For lcntr = lrow To 1 Step -1
        
        If ws.Cells(lcntr, 9).Value = "25" Then
           r = ws.Cells(lcntr, 2).Value
           For i = lcntr To 1 Step -1
            If ws.Cells(i, 2).Value = r Then
                ws.Rows(i).Copy
                ws1.Activate
                b = i 
                ws1.Cells(b - 1, 1).Select
                ActiveSheet.Paste
                ws.Activate
            
            
            ElseIf ws.Cells(i   1, 1).Value <> r Then
           
            End If
           Next i
             
        End If
        Application.CutCopyMode = False
    
        ws.Select

Next

End Sub
 

Комментарии:

1. Вы знаете, что lrow = Range("A2").End(xlDown).Row это использование текущего листа, а не одной из книг, которые у вас есть в переменной.

2. Вы могли бы значительно повысить надежность своего кода, сократив использование .Activate и .Select . Ваш код можно упростить до ws.Rows(i).Copy Destination:=ws1.Cells(i - 1, 1).Row . Который не зависит от ActiveSheet или Select

3. Является lrow = ActiveSheet.Range("A2").End(xlDown).Row ли это предполагаемым поведением? Я знаю ActiveSheet , что был опущен, но VBA подразумевает это.

4. Спасибо за ваши комментарии. Я довольно новичок в VBA и все еще учусь. @Toddleson

5. Привет @JerryJeremiah, Ты прекрасно решил мою проблему. Спасибо