You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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这种重复代码

使用步骤

  1. 打开你的Excel工作表,右键点击要设置功能的工作表标签(比如「Sheet1」),选择「查看代码」
  2. 把原来的代码全部删除,粘贴上面的新代码
  3. 关闭VBA编辑器,回到Excel,现在在B1-B50任意单元格输入文本,对应行A列就会自动写入当日日期,且这个日期是静态的,不会在下次打开工作表时更新

内容的提问来源于stack exchange,提问作者ebi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:26:04