Вставить ячейки на другой рабочий лист в VBA

71
10

Я хочу вставить ячейки в листы в VBA. В приведенном ниже коде я сначала выбираю диапазон ячеек, а затем вставляю его на другой рабочий лист. Но он работает с ошибкой "9": "Подстрочный код вне диапазона". Я думаю, проблема в последней строке для копирования и вставки. Здесь мой код:

Sub MatchFRB()
' find last row and column
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Set StartCell = Range("A1")
LastRow = Sheet22.Cells(Sheet22.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = Sheet22.Cells(StartCell.Row, Sheet22.Columns.Count).End(xlToLeft).Column

' Select cells until meets Threshold=5000000000
Dim i As Integer
Dim Bal As Double
Threshold = 0

For i = 2 To LastRow
Bal = Threshold + Range("AV" & i)
If Threshold > 5000000000# Then
Exit For
End If
Next i

' copy cells from Sheet22 and paste to Sheet21
Sheet22.Range(StartCell, Sheet22.Cells(i, LastColumn)).Copy Worksheets("Sheet21").Range(StartCell, Sheet21.Cells(i, LastColumn))

End Sub

Большое спасибо!

спросил(а) 2018-10-03T00:09:00+03:00 2 года назад
1
Решение
116

Вы должны правильно позвонить на свой лист. 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

ответил(а) 2018-10-03T00:30:00+03:00 2 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема