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

需求:编写VBA固定到期日,停止TODAY函数动态更新

实现指定单元格填充后将到期日转为静态值的VBA方案

需求说明

当P列对应单元格填入"Yes"时,把AN列同行的数值转为静态值写入U列,替代U列原本的=MAX(T1-TODAY(),0)动态公式,让U列不再随日期变动。

现有代码问题

你提供的代码仅会清空U列单元格,未实现核心的"复制AN列值到U列"逻辑,以下是修正后的完整代码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 仅响应P列的单元格变更
    If Not Intersect(Target, Me.Range("P:P")) Is Nothing Then
        ' 关闭事件触发,避免赋值U列时循环触发本事件
        Application.EnableEvents = False
        
        ' 处理批量粘贴到P列的情况,遍历所有变更的单元格
        Dim cell As Range
        For Each cell In Intersect(Target, Me.Range("P:P"))
            ' 不区分大小写匹配"Yes"输入
            If UCase(cell.Value) = "YES" Then
                ' 将AN列对应行的静态值直接赋值给U列,替代动态公式
                Me.Range("U" & cell.Row).Value = Me.Range("AN" & cell.Row).Value
            End If
        Next cell
        
        ' 恢复事件触发
        Application.EnableEvents = True
    End If
End Sub

关键细节说明

  • 关闭事件触发:修改U列值时会再次触发Worksheet_Change,加入Application.EnableEvents = False能避免无限循环,操作完成后记得恢复。
  • 支持批量操作:遍历Target中的每个单元格,即使批量粘贴多个"Yes"到P列,每一行都能正确处理。
  • 不区分大小写:用UCase()转换输入值,不管填"Yes""YES""yes"都能触发逻辑。
  • 直接赋值静态值:通过.Value赋值相当于"复制粘贴值",彻底替换U列的动态公式,确保数值不再变动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:11:10