Excel VBA需求:B列输入内容时为对应A列写入静态当日日期
解决Excel中B1:B50输入文本时自动写入对应行当日日期的问题
修改后的完整VBA代码
Private Sub Worksheet_Change(ByVal Target As Range) Dim targetRange As Range Dim targetCell As Range ' 定义要监听的范围:B1到B50 Set targetRange = Intersect(Target, Me.Range("B1:B50")) ' 如果修改的单元格不在目标范围内,直接退出 If targetRange Is Nothing Then Exit Sub ' 关闭事件触发,避免写入日期时再次触发Change事件 Application.EnableEvents = False ' 遍历所有被修改的目标单元格 For Each targetCell In targetRange ' 如果当前B列单元格不为空,对应行A列写入当日日期 If targetCell.Value <> "" Then Me.Cells(targetCell.Row, "A").Value = Date Else ' 可选:如果B列清空,也清空对应A列日期,不需要就删掉这行 Me.Cells(targetCell.Row, "A").ClearContents End If Next targetCell ' 恢复事件触发 Application.EnableEvents = True End Sub
关键改动说明
- 扩展监听范围:把原来固定的
Range("b1")改成Me.Range("B1:B50"),覆盖你需要的B1到B50区域 - 处理批量修改:加入循环遍历
targetRange中的每个单元格,支持一次性粘贴多个内容到B列的情况 - 避免递归触发:加入
Application.EnableEvents = False/True,防止写入日期时再次触发Worksheet_Change事件,造成死循环 - 动态对应行:用
targetCell.Row获取当前修改单元格的行号,自动对应到同一行的A列,不用逐个写B1对应A1、B2对应A2这种重复代码
使用步骤
- 打开你的Excel工作表,右键点击要设置功能的工作表标签(比如「Sheet1」),选择「查看代码」
- 把原来的代码全部删除,粘贴上面的新代码
- 关闭VBA编辑器,回到Excel,现在在B1-B50任意单元格输入文本,对应行A列就会自动写入当日日期,且这个日期是静态的,不会在下次打开工作表时更新
内容的提问来源于stack exchange,提问作者ebi
相关产品推荐
相关产品推荐

