#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, Ты прекрасно решил мою проблему. Спасибо