VBA:UsedRange不能正确更新

问题描述:

我每次使用它时都会更新UsedRange。我的代码如下: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产生的整数。

+0

VB.NET标记已删除。 VB.NET VBA –

尝试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中的单元格。

+0

不适用于我,我删除了广告系列工作表中的所有数据,并且仍然回显出较旧的行数,即179. – ayasocool

+1

嗯。好吧,愚蠢的问题:你是如何删除数据的?你确定你已经全部删除了吗?尝试手动删除所有单元格,然后再次运行代码。只是因为它适合我,所以我不能重现问题。 – vacip

+0

Ctrl A + Delete,这就是我所做的。 – ayasocool