Вы должны правильно позвонить на свой лист.VBA не принимает только имя листа в качестве объекта.Вы должны ссылаться на лист с помощью Worksheets("Sheet22")
, другой вариант - установить объект следующим образом:
Dim ws as object
set ws = Thisworkbook.Worksheets("Sheet22")
Таким образом VBA узнает, что вы хотите Sheet22 из книги, в которой находится макрос;в противном случае вы можете указать рабочую книгу с помощью Workbooks("YourWorkBookName").WorkSheets("SheetName")
.
Оттуда вы можете использовать ws.Range
, как вы делали с Sheet22
.Точно так же StartCell
может быть диапазоном, но он действует только с активным листом, поэтому было бы неплохо ссылаться на него на определенном листе и / или книге.Но в этом случае я пропустил это, потому что он всегда A1
, и его достаточно просто ввести.
Позже в вашем коде, когда вы пытаетесь вычислить баланс, вы также должны использовать .Value
после того, как вы позвоните в свой диапазон, чтобы получить доступ к номеру, сохраненному в ячейке.Но если вы проверяете порог, вы должны добавить threshold
обратно к себе.Тем не менее, я решил использовать Bal
в этом случае, потому что для меня это было более логично.
Sub MatchFRB()
' find last row and column
Dim LastRow As Long
Dim LastColumn As Long
Dim ws as object
Dim i As Integer
Dim Bal As Double
set ws = Thisworkbook.Worksheets("Sheet22")
LastRow = ws.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
LastColumn = ws.Cells.Find("*", searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
' Select cells until meets Threshold=5000000000
Bal = 0
For i = 2 To LastRow
Bal = Bal + ws.Range("AV" & i).Value
If Bal >= 5000000000 Then
Exit For
End If
Next i
' copy cells from Sheet22 and paste to Sheet21
ws.Range("A1:" & Cells(i, LastColumn).Address).Copy Worksheets("Sheet21").Range("A1:", Cells(i, LastColumn).address)
End Sub