我有一些工作正常的代码,但它没有选择并粘贴最后一行数据。
列AL在每隔一行中都有一个值,例如行1,3,5(AL1:AL2,AL3:AL4,AL5:AL6是合并的单元格)。其他列未合并,并且在行1-6中具有值。当我运行VBA代码时,不包括第6行(正确粘贴所有其他数据)。
我正在尝试选择单元格范围然后偏移1行(尝试拾取第6行),但这似乎不起作用。我找不到解决方案。
Dim lr As Long
Dim drng As Range 'dest range
Dim srng As Range 'source range
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
lr = ws.Range("A1").SpecialCells(xlCellTypeLastCell).Row
Set srng = ws.Range("AL1:AP" & lr)
Set drng = SumSh.Range("B" & Rows.Count).End(xlUp)(2)
Set drng = drng.Resize(srng.Rows.Count, srng.Columns.Count)
drng.Value = srng.Value
Next ws
答案 0 :(得分:1)
将您的示例代码更正为ws.Range("AL1:AP" & lr)
后,它无故障地运行或丢失任何行。第一列中的目标单元格未合并,但所有行都在那里。
Sub gettit()
Dim lr As Long
Dim drng As Range 'dest range
Dim srng As Range 'source range
Dim ws As Worksheet, SumSh As Worksheet
Set SumSh = Worksheets("Sum")
For Each ws In ActiveWorkbook.Worksheets
With ws
If .Name = "Sum" Then Exit For
lr = .Range("A1").SpecialCells(xlCellTypeLastCell).Row
Set srng = .Range("AL1:AP" & lr)
Set drng = SumSh.Range("B" & Rows.Count).End(xlUp)(2)
Set drng = drng.Resize(srng.Rows.Count, srng.Columns.Count)
drng.Value = srng.Value
End With
Next ws
End Sub
我确实必须将目标工作表设置为未声明且未分配的目标工作表。
我怀疑你的循环没有拾取目标工作表的下一个空白行,因为B列中的单元格未合并。换句话说,它会覆盖输入数据的最后一行,因为您要求B列中的下一个空白单元格,而B列始终有一个空白单元格从最后一行开始。
循环的最后一次迭代应该是正确的;尽管在B列的最后一行中有一个空白单元格。解决方案:在目标上向下移动一行。