Вставить ячейки в другой лист в VBA - PullRequest
0 голосов
/ 03 октября 2018

Я хочу вставить ячейки на листах в 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

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

1 Ответ

0 голосов
/ 03 октября 2018

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