Excel 当公式自动触发时,如何更改工作表\u更改代码以更改单元格的值

Excel 当公式自动触发时,如何更改工作表\u更改代码以更改单元格的值,excel,vba,formula,Excel,Vba,Formula,我的工作表的目的是将客户信息输入到所需的单元格中,如我上面发布的图像。新的一天,日期计数器列将增加一个 DateCounter公式:=IFERROR(如果(ISBLANK(B3),“”,TODAY()-B3),“”)(今天的日期-B3创建行的日期=自创建行以来已过多少天。) 自动增加1后,我希望利息列自动更新,使其等于自身+该行的每日。(例如:[I3Interest=I3Interest+H3perdiem] 我有一个VBA代码可以做到这一点,但它只在我手动更改日期计数器单元格时有效,而在公式自

我的工作表的目的是将客户信息输入到所需的单元格中,如我上面发布的图像。新的一天,
日期计数器
列将增加一个

DateCounter
公式:
=IFERROR(如果(ISBLANK(B3),“”,TODAY()-B3),“”)
(今天的日期-
B3
创建行的日期=自创建行以来已过多少天。)

自动增加1后,我希望
利息
列自动更新,使其等于自身+该行的
每日
。(例如:[
I3
Interest=
I3
Interest+
H3
perdiem]

我有一个VBA代码可以做到这一点,但它只在我手动更改
日期计数器
单元格时有效,而在公式自动触发时无效

VBA代码:

'*If "day" range is changed, update Interest cell*'

Private Sub Worksheet_Change(ByVal target As Range)

    If Not Intersect(target, Range("N3:N400")) Is Nothing Then

        Range("I" & target.Row).Value = Range("I" & target.Row).Value + Range("H" & target.Row)

        'Change Interest cell to the accounting format
        Range("I" & target.Row).NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
    End If
End Sub

我试图将代码更改为
工作表\u Calculate()事件
,但它会触发列中的每一行,并且我的excel工作表由于无限循环而崩溃。我尝试了这个示例。我也尝试了其他示例,但我对VBA的知识有限,似乎无法使此任务正常工作。

公式更改不会触发工作表更改。您需要工作表计算和静态变量

Option Explicit

Private Sub Worksheet_Calculate()
    Static tday As Long

    If Date <> tday Then
        tday = Date
        'suspend calculation so you don't run on top of yourself
         application.calculation = xlcalculationmanual

        'do all the update work here
        range(cells(2, "H"), cells(rows.count, "H").end(xlup)).copy
        cells(2, "I").pastespecial Paste:=xlPasteValues, Operation:=xlAdd


        'resume automatic calculation
         application.calculation = xlcalculationautomatic
    End If
End Sub
选项显式
专用子工作表_Calculate()
静态时间尽可能长
如果日期是tday那么
tday=日期
'暂停计算,这样您就不会自力更生了
application.calculation=xlcalculationmanual
'在此处执行所有更新工作
范围(单元格(2,“H”)、单元格(行数,“H”)。结束(xlup))。复制
单元格(2,“I”).Paste特殊粘贴:=xlPasteValues,操作:=xlAdd
'恢复自动计算
application.calculation=xlcalculation自动
如果结束
端接头

公式更改不会触发工作表更改。您需要工作表计算和静态变量。是的,这是我试图实现的,但我不知道这是如何实现的,但不幸的是,我认为它只适用于1行。我每天打开工作表时需要更新400多行。如果我声明静态变量,还有一件事a)如果日期改变,那么一切都会改变。您不必进行400次单独检查来确定日期是否更改。b) 把你所有的更新代码放在上面写着“完成所有更新工作”的地方。好的,我现在明白了。现在,当新的一天开始时,兴趣列中的每个单元格都需要更新计算。有没有比创建循环更好的方法?可能是复制H然后粘贴特殊的I操作:=xlAdd或类似的东西。嗯,由于我缺乏VBA知识,我真的不知道如何做。由于每个客户机的I范围不同,因此需要增加不同的值。你会做一些特殊的工作吗?