2012-12-10 39 views
1

我有一個Excel公式=IF(NOT(ISBLANK(A2)), TEXT(NOW(), "mm/dd/yyyy HH:ss"),"")Excel的NOW()不應該更新現有的時間戳

我的問題是:當然,每次我打開這個表它更新與最近的時間戳相關的單元格的值。如果它已經存在,我不希望此時間戳發生更改。

我想以某種方式爲:如果A2不爲空,並沒有近期更新,然後不更新的時間戳更新別的。

我找一個內聯函數如果可能的話。

感謝

+0

我不認爲你可以在一個單元格與Excel forumlas做到這一點。你可以用多個單元來完成。你也可以用VBA觸發變化事件來做到這一點,但這非常混亂和複雜。 – RBarryYoung

+0

@RBarryYoung感謝您的評論! – Vikram

+0

現在我很確定,即使使用多個單元格,也無法單獨使用Excel公式完成。VBA事件是它可以完成的唯一方式(或者VSTO事件)。 – RBarryYoung

回答

4

您可以使用VBA宏這樣做:

  1. 打開VBA編輯器(工具>宏> Visual Basic編輯器)
  2. 在左,右鍵單擊工作表Sheet1並選擇查看代碼
  3. 複製以下到編輯器:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 1 And Target.Row = 2 Then 
    If Target.Value = "" Then 
     Cells(2, 2).Value = "" 
    Else 
     Cells(2, 2).Value = Format(Now, "mm/dd/yyyy HH:mm:ss") 
    End If 
    End If 
End Sub 

如果你寫的東西到單元格A2,然後時間戳會寫入單元格B2,當你刪除A2,B2也將被刪除。時間戳不會自動更新。

+0

+1:您還可以將更改日期存儲到VBA公共或模塊變量中,並寫入VBA函數以返回可從Excel公式中調用的VBA函數(這將消除輸出單元上的代碼依賴關係)。 – RBarryYoung

+0

感謝球員......我在尋找是否可以找到一種方法來修復它在公式....顯然,這是不可能從我擡頭。 – Vikram

1

我想你想記錄編輯的時間中的單元格區域(說A9:C20和D11:E12),如果任何細胞(A2:C2或E3:F4)進行編輯。

你可以這樣做:

右鍵單擊工作表標籤,然後選擇「查看代碼」,並粘貼以下代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Intersect(Target, Range("A2:C2,E3:F4")) Is Nothing Then Exit Sub 
Range("A9:C20,D11:E12").Value = Now() 
Range("A9:C20,D11:E12").NumberFormat = "mm/dd/yyyy hh:mm:ss" 
End Sub 

時間戳不會autoupdated除非任何(A2的: C2或E3:F4)再次編輯。

0

只需更改默認的迭代1,所以重新計算一次之前停止。

回到這個:

  1. Office按鈕
  2. Excel選項
  3. 公式
  4. 迭代
0

文件>選項>公式>檢查手動計算>取消選中「重新計算工作簿之前保存'。 如果需要還檢查啓用迭代並如上所述將最大迭代設置爲1。