Excel查找范围的结尾,然后选择范围并复制
这一点可能有人问过,也可能没有人问过 我试图使用宏将一系列单元格从一个工作表复制到另一个工作表。我遇到的问题是,每次运行宏时,我要复制的范围都会发生很大的变化 例如,我希望在第一次运行时复制范围(“A2:P64”),然后,当我再次运行数据时,范围的起点仍然是A2,但范围的终点可能是P25或p90000。它始终是P列和(x变量)行 我尝试过这样的事情:Excel查找范围的结尾,然后选择范围并复制,excel,copy,range,vba,Excel,Copy,Range,Vba,这一点可能有人问过,也可能没有人问过 我试图使用宏将一系列单元格从一个工作表复制到另一个工作表。我遇到的问题是,每次运行宏时,我要复制的范围都会发生很大的变化 例如,我希望在第一次运行时复制范围(“A2:P64”),然后,当我再次运行数据时,范围的起点仍然是A2,但范围的终点可能是P25或p90000。它始终是P列和(x变量)行 我尝试过这样的事情: Dim past As Worksheet Dim countHist As String Dim view As Worksheet Dim c
Dim past As Worksheet
Dim countHist As String
Dim view As Worksheet
Dim countView As String
Set view = ThisWorkbook.Worksheets("BlueSteel Errors")
Set past = ThisWorkbook.Worksheets("Historical")
countView = view.Cells(Rows.Count, "A").End(xlUp).Row
countHist = past.Cells(Rows.Count, "A").End(xlUp).Row
MsgBox ("P" & countView) ' This currently gives the count of 53, so output is P53
view.Range("A2:P & countView").Select ' THIS IS THE PROBLEM LINE.. should look
'should resemble view.Range("A2:P53").Select
'EVERYTHING ELSE APPEARS TO WORK
Selection.Copy
past.Select
Range("A" & countHist).Select
ActiveSheet.Paste
我找不到一种方法来确定文本存在的最后一行,然后将该数字附加到范围字段的末尾,这样我就可以选择并附加到其他工作表中。。我只需要A2-Px中的数据,而不是P之外的所有多余字段。也许我需要复制然后删除它。您需要
End(xlUp)
功能
所以更新你的问题行
从
到
请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请…请。。。请不要使用
。选择
您的代码中还有几个错误
您已将countHist
和countView
声明为String
。它应该是长的
引号内的任何内容都是字符串。所以“A2:P&countView”
是一个字符串。您需要“A2:P”和countView
您需要将1
添加到目标工作表的最后一行,以便不覆盖最后一行
试试这个
Sub Sample()
Dim past As Worksheet, view As Worksheet
Dim countHist As Long, countView As Long
Set view = ThisWorkbook.Worksheets("BlueSteel Errors")
Set past = ThisWorkbook.Worksheets("Historical")
countView = view.Cells(view.Rows.Count, "P").End(xlUp).Row
countHist = past.Cells(past.Rows.Count, "A").End(xlUp).Row + 1
'~~> Do a direct copy paste instead of selecting first
view.Range("A2:P" & countView).Copy past.Range("A" & countHist)
End Sub
您可能需要使用.Find
查找最后一行,因为并非所有单元格都已填充到特定行中。有关查找最后一行的详细信息应该是这样的view.Range(“A2:p”和countView)。选择
。谢谢。。这与我的原始代码非常接近,是的,Select特性有它的缺点。。谢谢你发现了我的“疏忽…”:D“这就是我每次编写代码不超过一两个小时的原因。”。。代码开始看起来一样,而且总是正确的。即使这是错误的。
view.Range("A2:" & view.Range("P" & Cells.Rows.Count).End(xlUp).Address).Select
Sub Sample()
Dim past As Worksheet, view As Worksheet
Dim countHist As Long, countView As Long
Set view = ThisWorkbook.Worksheets("BlueSteel Errors")
Set past = ThisWorkbook.Worksheets("Historical")
countView = view.Cells(view.Rows.Count, "P").End(xlUp).Row
countHist = past.Cells(past.Rows.Count, "A").End(xlUp).Row + 1
'~~> Do a direct copy paste instead of selecting first
view.Range("A2:P" & countView).Copy past.Range("A" & countHist)
End Sub