2015-05-29 92 views
3

我每次使用它時都會更新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 –

回答

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中的單元格。

+0

不適用於我,我刪除了廣告系列工作表中的所有數據,並且仍然回顯出較舊的行數,即179. – ayasocool

+1

嗯。好吧,愚蠢的問題:你是如何刪除數據的?你確定你已經全部刪除了嗎?嘗試手動刪除所有單元格,然後再次運行代碼。只是因爲它適合我,所以我不能重現問題。 – vacip

+0

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