我的工作表的目的是将客户信息输入到所需的单元格中,例如我上面发布的图像。每一天,DateCounter
列都会增加一。
DateCounter
公式:=IFERROR(IF(ISBLANK(B3),"",TODAY()-B3),"")
(今天的日期-B3
创建行的日期=自创建行以来已经过了几天。)
在自动将其增加一之后,我希望Interest
列自动更新并使其等于自身+该行的Per Diem
。 (示例:[{I3
利息= I3
利息+ H3
(每笔交易)。
我有一个完全可以执行此操作的VBA代码,但仅在手动更改DateCounter
单元格时有效,而在公式自动触发时无效。
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
我试图将代码更改为Worksheet_Calculate() event
,但是它触发了列中的每一行,并且由于无限循环,我的excel工作表崩溃了。我尝试了示例 [here] 。我还尝试了其他示例,但是我对VBA的了解有限,而且似乎无法完成此任务。
答案 0 :(得分:1)
公式更改不会触发Worksheet_Change。您需要Worksheet_Calculate和一个静态变量。
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