在第一列中选​​择包含合并调用的范围

时间:2015-08-09 02:30:31

标签: excel vba excel-vba

我有一些工作正常的代码,但它没有选择并粘贴最后一行数据。

列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

1 个答案:

答案 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列的最后一行中有一个空白单元格。解决方案:在目标上向下移动一行。