2012-07-05 69 views
1

我決定一個函數來確定LASTROW在Excel中可能一段時間內保存我這樣從長遠來看:爲什麼這個易變的LastRow函數不能自動重新計算?

Function LastRow() As Long 
Application.Volatile 

With ActiveSheet.UsedRange 
     LastRow = .Rows(.Rows.Count).Row 
    End With 

End Function 

因爲這是罰款的大部分,但我注意到,如果實際的最後一個單元格只是格式化如果輸入值,它不會重新計算它的做法。 它會在重新計算時得到它的正確性,但我認爲使這種易失性會自動做到這一點。

我誤解了什麼?

任何人做類似的事情,要知道,使這個波動並使用ActiveSheet使得它不可靠您激活另一張紙,因爲函數在片返回LASTROW和重新計算的時刻。可能不是最好的主意。當細胞計算

回答

2

揮發性只觸發:MSDN

有欺騙的方式 - 這是基於以下事實,即更改單元格,你必須首先選擇它:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
    Application.Calculate 
End Sub 

請注意,這可能會破壞一些基本功能。在Microsoft KB文章中,他們評論說他們的示例將打破複製/粘貼的能力

+0

謝謝@Sean Cheshire MSDN文章我應該看到我自己。現在我可以看到格式化本身不需要計算,因爲實際上沒有輸入變量 – datatoo 2012-07-05 13:54:34

+0

+ 1是的,你說得對。不幸的是,「基本功能」還包括「UNDO」。宏也會重置UNDO堆棧。 – 2012-07-05 15:52:32

相關問題