2014-10-16 81 views
2

我有一個電子表格,用戶可以在其中輸入項目更新,然後輸入更新日期。發生的事情是人們忘記約會他們的筆記。有沒有辦法讓日期單元格自動輸入當前/日期輸入?當用戶在相鄰單元格中輸入信息時自動填充日期單元格

我假設if函數會這樣做嗎?

+0

它將輸入日期&時間A & b將數據錄入。但它將如何取決於工作表的現有設計。 – Fratyx 2014-10-16 18:35:22

回答

4

事件宏將放置在列日期如果A.宏應安裝在工作表的代碼區列中輸入一個值:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A As Range, B As Range, Inte As Range, r As Range 
    Set A = Range("A:A") 
    Set Inte = Intersect(A, Target) 
    If Inte Is Nothing Then Exit Sub 
    Application.EnableEvents = False 
     For Each r In Inte 
      r.Offset(0, 1).Value = Date 
     Next r 
    Application.EnableEvents = True 
End Sub 

因爲它是工作表代碼,它很容易安裝和自動使用:

  1. 右鍵單擊Excel窗口底部附近的選項卡名稱
  2. 選擇查看代碼 - 這帶來了一個VBE窗口
  3. 粘貼的東西並關閉VBE窗口

如果您有任何問題,首先嚐試在一個審判工作。

如果保存工作簿,宏將與其一起保存。 如果您正在使用一個版本的Excel更高然後2003,你必須保存 該文件作爲.XLSM而非的.xlsx

要刪除宏:

  1. 彈出窗口VBE如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

要了解更多關於一般的宏,請參閱:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解更多有關事件宏(工作表的代碼),請參閱:

http://www.mvps.org/dmcritchie/excel/event.htm

宏必須爲此工作啓用!

更改代碼以使用不同的列。

EDIT#1:

此版本將不會覆蓋材料已經存在於柱

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A As Range, B As Range, Inte As Range, r As Range 
    Set A = Range("A:A") 
    Set Inte = Intersect(A, Target) 
    If Inte Is Nothing Then Exit Sub 
    Application.EnableEvents = False 
     For Each r In Inte 
      If r.Offset(0, 1).Value = "" Then 
       r.Offset(0, 1).Value = Date 
      End If 
     Next r 
    Application.EnableEvents = True 
End Sub 
+0

是否可以將代碼修改爲只填寫日期,如果在B列中沒有填寫日期(或任何值)?我嘗試添加一個IF和使用偏移量,但是我無法使它工作..你能幫助我嗎? - [從另一個答案通過sofie](http://stackoverflow.com/a/33937777/4099593) – 2015-11-26 11:44:14

+0

@BhargavRao ................是....... ....在幾個小時內 – 2015-11-26 11:47:08

+0

@BhargavRao看我的**編輯#1 ** – 2016-01-02 16:21:05

1

嘗試此公式中的期望的細胞(例如C13),以填充當前日期當相應的輸入單元(如D13)不爲空且未填充0時:

=IF(AND(D13<>"";D13<>0);TODAY();"") 

然後,您可以將此公式複製到後續單元格以填寫該列的公式(例如col C)

2

ZAT的答案對我有效......在將「;」更改爲「,」之後。

=IF(AND(D52<>"",D52<>0),NOW(),"") 

我用「NOW」而不是「TODAY」來給我一天的時間。

1

列列d

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim A As Range, B As Range, Inte As Range, r As Range 
Set A = Range("D:D") 
Set Inte = Intersect(A, Target) 
If Inte Is Nothing Then Exit Sub 
Application.EnableEvents = False 
    For Each r In Inte 
     If r.Value > 0 Then 
      r.Offset(0, -3).Value = Date 
      r.Offset(0, -3).NumberFormat = "dd-mm-yyyy" 
      r.Offset(0, -2).Value = Time 
      r.Offset(0, -2).NumberFormat = "hh:mm:ss AM/PM" 
     Else 
      r.Offset(0, -3).Value = "" 
      r.Offset(0, -2).Value = "" 
     End If 
    Next r 
Application.EnableEvents = True 
End Sub 
相關問題