2017-04-13 41 views
-1
End Date  Original End Date     
4/13/2017  4/13/2017------------> 1st instance value 

服用1實例值從不同的細胞後鎖定一個單元格的值,在Original End Date列中的日期不應該得到改變(這應該從結束日期第一個值項)。 Original End Date欄應凍結至End Date欄中的第一個入境日期。如果用戶在<code>End Date</code>列更改日期如何在Excel中

如果用戶更改結束日期,應該是這樣的:

End Date Original End Date    
4/20/2017 4/13/2017------------> End Date is changed. 

但原來的結束日期仍然相同,第一個結束日期。

是否有任何Excel公式或VBA代碼?

此外,表不應該被保護,以滿足這一要求。

+0

'End Date'是什麼列?什麼專欄是'原始結束日期'? –

+0

結束日期在P列,原始結束日期在Q列 –

+0

請嘗試下面的答案和代碼 –

回答

0

假設列A爲結束日期和列B是原始結束日期,將以下代碼上板模塊。爲此,請右鍵單擊工作表選項卡 - >查看代碼,並將以下代碼粘貼到打開的代碼窗口中 - >將工作簿保存爲啓用宏的工作簿。

Private Sub Worksheet_Change(ByVal Target As Range) 
Application.EnableEvents = False 
If Target.Column = 1 And Target.Row > 1 Then 
    If Target.Offset(0, 1) = "" Then Target.Offset(0, 1) = CDate(Target) 
ElseIf Target.Column = 2 And Target.Row > 1 Then 
    If Target <> "" Then Application.Undo 
End If 
Application.EnableEvents = True 
End Sub 

此代碼僅允許用戶輸入列A中的結束日期。第一個實例將記錄在B列的相應單元格中。稍後用戶既不能更改B列中的日期,也不能在列B中輸入任何日期或內容,即列B將被鎖定以供任何用戶輸入,並且它只接受日期在列A中首次輸入。

+0

是的這是我正在尋找的那個..原創日期應該是不可編輯的。 –

+0

很高興工作。 – sktneer

1

由於End Date在列「P」中,並且Original End Date在列「Q」中。

因此,將下面的代碼放置在您的相關工作表的代碼中,只有當列「P」中的值被修改時,代碼纔會起作用。

代碼

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column = 16 Then ' check if the value modified is in Column "P" 
    If Target.Offset(, 1).Value = "" Then '<-- check if the value in Column "Q" is empty 
     Target.Offset(, 1).Value = Target.Value ' modify value of Column "Q" to value of Column "P" 
    End If 
End If 

End Sub 
+0

@SunnyJayadev歡迎:) –

+0

原始日期是可編輯的。它應該是不可編輯的。 –

+0

@SunnyJayadev這不是你在帖子中要求的內容 –