Приведенный ниже код работал по назначению: копирование некоторых строк из одного листа в другой. Но, когда я добавил детали с rangeToDelete, который предназначен для очистки пространства, в которое я копирую, перед каждым новым запуском кода. Я не уверен, что происходит, но когда я использую MsgBox для проверки некоторых частей кода, похоже, что это цикл, который не работает. Но, не поднимая ошибки, я не знаю, почему.Код VBA работает, но не имеет эффекта
Option Explicit
Sub findCells()
Dim topCell As String
Dim leftCell As String
Dim refCell As Range
Dim sht As Worksheet
Dim lastRow As Long
Dim i As Long
Dim cellVal As String
Dim altCounter As Long
Dim crange As Range
Dim rangeToDelete As Range
Set rangeToDelete = Worksheets("Summary").Cells(31, "A").CurrentRegion
rangeToDelete.Value = ""
Set refCell = ActiveCell
topCell = refCell.End(xlUp).Value
leftCell = refCell.End(xlToLeft).Value
Set sht = Worksheets(topCell)
lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
With sht
.Range("A1:G1").Copy Worksheets("Summary").Range("A31:G31")
altCounter = 31
For i = 1 To lastRow
cellVal = Cells(i, 5).Value
If leftCell = cellVal Then
altCounter = altCounter + 1
Set crange = .Range("A" & i & ":" & "G" & i)
crange.Copy Worksheets("Summary").Range("A" & altCounter & ":" & "G" & altCounter)
End If
Next i
End With
End Sub
Каково значение последнего для входа в цикл? –
Не используйте .Value = "", а скорее .ClearContents. Вы заполняете эти ячейки пустой строкой, не очищая их. – jkpieterse
Или просто так: 'rangeToDelete.Clear' – Vityata