2017-04-06 218 views
1

我有一個Excel報告,我使用的是插入了多個SQL表,因此我有一個運行刷新所有表的宏的命令按鈕。我試圖向該宏添加一些代碼,以創建上次刷新表的時間戳。如何停止刷新的NOW()公式

這是我到目前爲止有:

Sub Button1_Click() 
    ThisWorkbook.RefreshAll 
    Range("I17").Formula = "=Now()" 
End Sub 

此我想要做什麼,但問題是我的報告有很多其他細胞的不斷更新紙張,這反過來又導致時間戳細胞(I17 )不斷刷新。

我該怎麼做才能使NOW()函數「鎖定」到那個時間,並且不會刷新,除非我專門點擊我的宏按鈕?

+9

使它固定文本? - 'Range(「I17」)。Value = Now()' –

+0

似乎有效。謝謝! –

+1

@AlexK。 'Now'是'VBA.DateTime'模塊的屬性獲取者 - 括號在這裏是誤導性的冗餘。 –

回答

2

公式重新計算其結果,每次重新計算時,的定義爲。如果情況並非如此,Excel將毫無用處。

你想要的是不是公式然後,但

因此,而不是使用Excel的NOW()功能,使用VBA的DateTime.Now財產分配單元格的

ActiveSheet.Range("I17").Value = VBA.DateTime.Now 

隨着一切隱含合格它的短:

[I17] = Now 

我鼓勵你找到一箇中間的基礎 - 隱式引用是一個非常普遍的錯誤來源。像這樣的東西似乎是可以接受的,只要你沒有一個Now變量,常量,過程或模塊範圍那會隱藏VBA.DateTime屬性:

ActiveSheet.Range("I17") = Now 

上述指令明確資格的Range通話使用活動工作表隱式使用Range對象的默認屬性Value),並隱式限定VBA.DateTime標準庫模塊的Now屬性。

+0

@Downvoter介意解釋這個答案有什麼問題,所以我可以改進它? –

+0

感謝您的幫助。我從來沒有在VBA編碼,所以我仍然在學習基礎知識,但是這給了一些很好的基本理解。 –

+0

@ D.Morley我有一個(免費開源的)VBE插件 - [Rubberduck](http://rubberduckvba.com) - 可以幫助你找到代碼中的問題,並在你需要之前解決它們在SO上詢問。 –