Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何为变更事件中的下一个循环生成?_Excel_Vba - Fatal编程技术网

Excel 如何为变更事件中的下一个循环生成?

Excel 如何为变更事件中的下一个循环生成?,excel,vba,Excel,Vba,我有一张数据表。 我想计算现在的日期和单元格C3:C10中的日期之间的差值。结果存储在单元格D3:D10中 到目前为止我都知道了 但是,如果有人操纵结果单元格中的值,则VBA应重新计算这些单元格并更正结果 Private Sub Worksheet_Change(ByVal Target As Range) For Zeile = 3 To 10 Sheets("Tabelle2").Cells(Zeile, "D") = Work

我有一张数据表。 我想计算现在的日期和单元格C3:C10中的日期之间的差值。结果存储在单元格D3:D10中

到目前为止我都知道了

但是,如果有人操纵结果单元格中的值,则VBA应重新计算这些单元格并更正结果

Private Sub Worksheet_Change(ByVal Target As Range)
    For Zeile = 3 To 10
        Sheets("Tabelle2").Cells(Zeile, "D") = WorksheetFunction.YearFrac(Sheets("Tabelle2").Cells(Zeile, "C"), Date)
        If Sheets("Tabelle2").Cells(Zeile, "C") = 0 Then
           Sheets("Tabelle2").Cells(Zeile, "D") = ""
        End If
    Next Zeile
End Sub

首先要做的是检查是否在
C3:C10
中进行了更改,您可以使用
Intersect

然后应该禁用事件以停止代码触发本身,为此使用
Application.EnableEvents=False

下一个循环通过
目标
,以防多个单元格被更改,并执行所需的操作/计算

最后,使用
Application.EnableEvents=True重新启用事件

选项显式
私有子工作表_更改(ByVal目标作为范围)
变暗rng As范围
暗淡单元格作为范围
暗淡如长
设置rng=Intersect(目标,范围(“C3:C10”))
如果不是,那么rng什么都不是
Application.EnableEvents=False
对于rng.单元格中的每个单元格
Zeile=单元格。行
如果单元格(Zeile,“C”)为0,则
单元格(Zeile,“D”)=应用年分数(单元格(Zeile,“C”).值,日期)
其他的
单元格(Zeile,“D”)=“”
如果结束
下一个细胞
Application.EnableEvents=True
如果结束
端接头
如果希望在
C3:C10
D3:D10
中的值更改时触发代码,请更改此选项

Set rng=Intersect(目标,范围(“C3:C10”))
对这个

Set rng=Intersect(目标,范围(“C3:D10”))

如果您想通过更改10来增加行数,您也可以在此处更改范围地址。

如果有人清除相交行,则由于target.cells的大小,循环将有16000次迭代。对于Intersect(目标,范围(“C3:C10”))中的每个单元格,最好像
那样运行循环。单元格
以确保其运行的迭代次数最少。您好,如果我运行代码,则会出现错误消息。这是照片。它要求运行宏。这不是错误消息,它要求您运行哪个宏。因为您无法通过单击“播放”来运行事件。您需要通过更改页面上的单元格来触发事件。@Credo\u Moi您不需要手动运行代码,而是在相关工作表上进行更改时触发。如果在相关范围内更改某些内容,即
C3:C10
,则将执行代码主体。