Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Excel VBA-更改单元格时运行宏_Vba_Excel - Fatal编程技术网

Excel VBA-更改单元格时运行宏

Excel VBA-更改单元格时运行宏,vba,excel,Vba,Excel,我正在尝试编写一个宏,该宏在编辑工作表时自动运行。列H的标题为“更新日期”,宏应将今天的日期放在单元格H中,其中#是已更改单元格的行。以下是我使用的代码: Private Sub Worksheet_Change(ByVal Target As Range) Target.Select Range("H" & ActiveCell.Row).Select ActiveCell.Value = Date End Sub 保存工作簿并更改单元格A2的值后,代码按我的预期将今天的日期转换

我正在尝试编写一个宏,该宏在编辑工作表时自动运行。列H的标题为“更新日期”,宏应将今天的日期放在单元格H中,其中#是已更改单元格的行。以下是我使用的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Target.Select
Range("H" & ActiveCell.Row).Select
ActiveCell.Value = Date

End Sub
保存工作簿并更改单元格A2的值后,代码按我的预期将今天的日期转换为H2,但随后给了我一个错误。我单击了debug,突出显示了
目标.Select
行。我认为循环是问题所在,所以我更新了代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
Target.Select
Range("H" & ActiveCell.Row).Select
ActiveCell.Value = Date
Application.EnableEvents = True

End Sub
这一次,我更改了单元格B3的值,它将今天的日期转换为B4。然后Excel部分冻结:我仍然可以编辑该工作簿,但无法打开或查看任何其他工作簿。我关闭了所有工作簿,但Excel本身无法关闭,我不得不使用任务管理器来结束它。

使用

Private Sub Worksheet_Change(ByVal Target As Range)
    Range("H" & Target.Row).Value = Date
End Sub
会给你更好的稳定性<代码>目标是已更改的范围

有可能(我在家,所以无法检查)更改值会重新触发工作表\u更改事件。如果是,则使用

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> Range("H" & Target.Row).Address Then        
       Range("H" & Target.Row).Value = Date
   End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Address范围为(“H”和Target.Row).Address,则
范围(“H”和Target.Row)。值=日期
如果结束
端接头
使用

会给你更好的稳定性<代码>目标是已更改的范围

有可能(我在家,所以无法检查)更改值会重新触发工作表\u更改事件。如果是,则使用

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> Range("H" & Target.Row).Address Then        
       Range("H" & Target.Row).Value = Date
   End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Address范围为(“H”和Target.Row).Address,则
范围(“H”和Target.Row)。值=日期
如果结束
端接头