VBA:UsedRange无法正确更新

时间:2015-05-29 07:51:41

标签: excel vba excel-vba

每次我使用它时,我都会遇到更新UsedRange的问题。我的代码中有这个:

Sheets("Campaign").UsedRange 'Refresh UsedRange
LastRow = Sheets("Campaign").UsedRange.Rows.Count

这是检查特定工作表中使用的最后一行。现在,它在第一次运行时工作并输出正确的整数,但如果从具有最大行数的列中删除行,则不会更新。问题是,如果您在该特定列中添加更多行,它会更新。

这是我的实际代码:

Sub CMPGN_MCRO()

    Sheets("Campaign").UsedRange 'Refresh UsedRange.
    LastRow = Sheets("Campaign").UsedRange.Rows.Count

    Dim RangeString As String
    Worksheets("Campaign").Select
    Range("A1:A" & LastRow).Select
    RangeString = Selection.Address

    Range("A1").End(xlToRight).Select
    RangeString = RangeString & ":" & Selection.Address 'Selects all the data in Campaign Worksheet.

    Dim C As Range
    i = 2
    For Each C In Worksheets("Campaign").Range(RangeString).Cells
      If Mid(C.Value, 6, 2) = "AC" Then
      Worksheets("Sheet3").Range("A" & i) = C.Value 'Echo out all the filtered data and output it to another worksheet.
      i = i + 1
    End If
    Next
MsgBox (LastRow)
End Sub

PS:我使用MsgBox来回显usedRange产生的整数。

1 个答案:

答案 0 :(得分:3)

尝试将UsedRange命令与此结合使用:

ActiveCell.SpecialCells(xlCellTypeLastCell).Row

代码SpecialCells(xlCellTypeLastCell)是指工作表上最后使用的单元格。在Excel中,类似的命令是{Ctrl End}。

在您的代码中:

Sheets("Campaign").UsedRange 'Refresh UsedRange
LastRow = Sheets("Campaign").Range("A1").SpecialCells(xlCellTypeLastCell).Row

需要注意的是,有时只删除数据(Del键)是不够的。尝试删除单元格({Ctrl - }或{右键单击删除})。

另一个有效的代码,除非您的工作表填写到最后一行:

LastRow = cells(Sheets("Campaign").Range("A1").SpecialCells(xlCellTypeLastCell).Row,1).offset(1,0).end(xlUp).row

它的作用:从单元格A1中找到最后一个单元格,然后向下一个以确保我们在一个空单元格中,然后使用ctrl-up查找填充了数据的最后一个单元格。有点乱,但有效,即使A列中有一些未正确删除的单元格。