Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
范围更新时列日期输入的VBA代码_Vba_Excel_Worksheet Function - Fatal编程技术网

范围更新时列日期输入的VBA代码

范围更新时列日期输入的VBA代码,vba,excel,worksheet-function,Vba,Excel,Worksheet Function,我有一个电子表格,我需要B列自动填充更新C-K列的日期和时间。还有比K更远的列,我不想触发更新代码 首先,我使用了以下代码: Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer i = Target.Row Dim t As String t = VBA.Now Cells(i, 2) = t End Sub Private Sub Worksheet_Change(ByVal Target As Range

我有一个电子表格,我需要B列自动填充更新C-K列的日期和时间。还有比K更远的列,我不想触发更新代码

首先,我使用了以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
i = Target.Row
Dim t As String
t = VBA.Now
Cells(i, 2) = t
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("C6:K43")      
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
    Is Nothing Then
Dim i As Integer
    i = Target.Row

    Dim t As String
    t = VBA.Now

    Cells(i, 2) = t
End If
End Sub
这对我的情况不起作用,因为这会更新行中的任何更改。这样做的好处是,用户无法在这些单元格上键入内容,从而阻止VBA输入更新的日期

要仅为所选行启用触发器,我转到以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
i = Target.Row
Dim t As String
t = VBA.Now
Cells(i, 2) = t
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("C6:K43")      
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
    Is Nothing Then
Dim i As Integer
    i = Target.Row

    Dim t As String
    t = VBA.Now

    Cells(i, 2) = t
End If
End Sub
然而,现在用户可以输入这些内容,并且不再有效

我试过锁定电池,但是VBA不能工作。我还尝试使用偏移量公式,但由于单元格的范围大于1列,因此这不起作用


在我把头发撕下来之前有什么建议吗?

既然
Target
已经是
范围
,就不需要使用
范围(Target.Address)
,只要
目标
就行了

此外,在@Tim Williams反馈之后,您需要将
应用程序.EnableEvents
设置为
False
,而不是在将当前时间添加到“B”列中的单元格后重新输入代码

请尝试以下代码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim KeyCells As Range
Set KeyCells = Range("C6:K43")

Application.EnableEvents = False
If Not Application.Intersect(KeyCells, Target) Is Nothing Then
    Range("B" & Target.Row) = Now
End If
Application.EnableEvents = True

End Sub

从更改事件处理程序中更新工作表时,应在执行更新时禁用事件,否则将重新触发代码。我想这可能会对你有所帮助。回答得好-只要检查一下你的意思是不是真的
displayerts
?这不应该是
启用事件吗
?感谢您提供上述代码。这确实适用于我所需的公式,但是,使用此代码,我仍然可以在B列中键入,这将删除此列中的VBA日期条目。这有什么办法吗?