首页 > 解决方案 > 将单元格粘贴到 VBA 中的另一个工作表

问题描述

我想在 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

非常感谢!

标签: excelvbacellspreadsheetcopy-paste

解决方案


您必须正确调用您的工作表。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

推荐阅读