VBA:UsedRange不正确更新

每次使用时都会更新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产生的整数。

尝试将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中find最后一个单元格,然后下一个单元格以确保我们在空单元格中,然后使用ctrl-up查找填充数据的最后一个单元格。 有点乱,但工作,即使有一些没有正确删除列A中的单元格。