2011-12-13 118 views
2

我想更新日期時間單元格當值被輸入到一位如此,Excel中OnChange事件

我怎樣才能B列的值更改爲日期,時間,當值進入A?

是否有類似if-then-else?

我嘗試了條件格式但沒有成功。

有人可以發佈一個工作的例子嗎?

謝謝

回答

1

嘗試使用

=IF(A3<>"",IF(B3="",NOW(),B3),"") 

值將在A列和時間戳列B.此外,你必須啓用的選項迭代計算。

請注意,這隻會在A列中首次輸入一個值時生成一個時間戳。要使用此方法,而不是通常編輯單元格的值,則必須將其刪除並重新輸入一個新的價值。

我擔心這只是一種解決方法,而不是一個完整的解決方案。如果我找到更方便的東西,我會更新它。

1

你可以自己嘗試過,不是嗎?
在我看來,最難的部分是想想Change事件。

Private Sub Worksheet_Change(ByVal Target As Range)  
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub 
Application.EnableEvents = False 

ActiveSheet.Cells(Target.Row, 2).Value = Format(Now, "h:mm") 
Application.EnableEvents = True 
End Sub 

您可以將Format內容更改爲任何您需要的內容。

+0

你好,是的,我絕對可以,我是一個程序員10年,但真的不知道使用excel,也不是我最大的數學其實:)我甚至不知道我要在哪裏添加此代碼但我會嘗試。謝謝:) – Herr 2011-12-13 20:43:51

+0

對不起,我可能誤解了你的標題......我所展示的是[事件過程](http://www.cpearson.com/excel/Events.aspx),你需要添加這個代碼到工作表:右鍵單擊該選項卡並單擊編輯代碼並複製粘貼我的答案中的代碼(看看上面的鏈接也可以看到我的評論) – JMax 2011-12-13 20:48:35

+2

+1 - 但建議您將您的EnableEvents =在你的Intersect測試後第3行爲False :) – brettdj 2011-12-14 11:32:45

0

公式= NOW()是volitile,這意味着只要工作簿中的任何內容發生更改,就會重新計算,因此如果使用它,則應該沒有問題。

單獨說明,您可以創建UDF以及在代碼中簡單添加Application.Volitile

1
Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
'when entering data in a cell in Col A 
On Error GoTo enditall 
    Application.EnableEvents = False 
If Target.Cells.Column = 1 Then 
     n = Target.Row 
     If Me.Range("A" & n).Value <> "" Then 
      Me.Range("B" & n).Value = Format(Now, "hh:mm:ss") 
     End If 
    End If 
enditall: 
    Application.EnableEvents = True 
End Sub 

如何使用?

  1. 右鍵單擊工作表選項卡和「查看代碼」。

  2. 將代碼粘貼到該表單模塊中。

  3. Alt + q返回到Excel窗口。

Click here用於樣本文件...

3

下面是處理的情況下的替代事件過程,其中用戶的更新在一個時間多於一個的小區(即,漿料的細胞塊)。

當使用事件過程Worksheet_Change時,必須在開始時關閉事件處理,並確保它始終在最後重新打開。

請注意,我故意省略了時間戳的格式,因爲先前的示例已從日期中刪除。如果該列尚未格式化並且需要格式化,我建議您添加一行代碼以設置.NumberFormat屬性。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
    If Target.Column = 1 Then 
     Target.Resize(ColumnSize:=1).Offset(ColumnOffset:=1).Value = Now 
    End If 
    Application.EnableEvents = True 
End Sub 

跟蹤A列變化的情況很簡單;當用戶粘貼單元格塊時,其他列可能會有點棘手。例如,如果要捕獲對D列的更改,則代碼需要處理在單元格C2:D2被粘貼時的情況,在這種情況下Target.Column = 3.(使用Intersect方法或同時查看Target.Columns.Count屬性