2013-07-22 74 views
1

我希望我的Excel電子表格列B僅在列A第一次更改時加蓋日期時間。我看過很多VBA代碼,但它捕獲了最後一次更改,而不是第一次更改。Excel - 使用日期時間更新另一個單元格的更新列

我試圖用這樣的:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then 
     Target.Offset(0, 1) = Format(Now(), "HH:MM:SS") 
    End If 
End Sub 

它的工作除了當我複製並粘貼到發言權3行,日期時間標記只顯示了第一個的3條記錄。

+0

什麼意思是「第一次更改」 - 每次打開工作簿後;總是在B空時; ...? – KekuSemau

回答

0

下面的代碼對我的作品

Private Sub Worksheet_Change(ByVal Target As Range) 

    On Error Resume Next 

    Application.EnableEvents = False 

    If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then 
     Target.Offset(0, 1) = Format(Now(), "HH:MM:SS") 
    End If 

    Application.EnableEvents = True 
End Sub 
+0

如果B列中已經存在值並且某些值被再次粘貼,那麼這不起作用,因爲錯誤處理被禁用,並且忽略對「Value =」「'的檢查。 –

+0

@AndyG如果列中存在值,則表示列A中的相應值已編輯。 – Santosh

-1

我收到當試圖粘貼到A列的幾個單元,從該行的錯誤消息:

Target.Offset(0, 1).Value = "" 

這是因爲偏移量是一個多於一個單元格的範圍,我們無法將此範圍的Value與單個值進行比較。您可以檢查Target.Rows.Count。如果這個值大於1,那麼你可以遍歷Target範圍,每次在輸入Offset(0, 1)之前檢查相鄰單元是否爲空。

通過Target細胞下面的循環,並有效,即使目標是單細胞:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range 

    If Target.Column = 1 Then 
     Application.EnableEvents = False 
     For Each rng In Target 
      If rng.Offset(0, 1).Value = "" Then 
       rng.Offset(0, 1) = Format(Now(), "HH:MM:SS") 
      End If 
     Next rng 
     Application.EnableEvents = True 
    End If 
End Sub 

您也應該檢查是否Target超出一列。如果是這樣,那麼大概你只想把郵票輸入到B欄(對於A欄的更改)。

相關問題