【发布时间】:2017-01-26 15:31:28
【问题描述】:
我有一个 Excel 公式,它在单元格 A1 中为我提供了上周五的日期“=TODAY()-WEEKDAY(TODAY())-1”
我只想在另一个工作表 B2:D469 中的参考范围内的值发生更改时更新单元格 A1。
以下是我正在使用的代码,但问题是代码仅在我手动更改范围时才有效。但是,当源数据透视表刷新时,范围内的值会更新。我希望在刷新数据透视表并且“B2:D469”范围内的值发生变化时更新代码。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Worksheets.("Source").Range("B2:D469")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Worksheets.("Dashboard").Range ("A1").EnableCalculation = True
End If
End Sub
【问题讨论】:
-
您将需要使用 Worksheet_Calculate 事件,问题是它没有 Target,因此很难知道数据是否已更改。您可以包括将数据保存到另一个工作表,然后每次重新计算工作表时,它都会根据存储的数据检查数据,如果不同,则更改值并将新值复制并粘贴到存储中。
-
嗨,我尝试了 worksheet_Calculate 事件,但它没有用。这是我使用的代码。谢谢 [CODE] Private Sub Worksheet_Calculate(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Worksheets("Dashboard").Range("G54:J54") If Not Application.Intersect(KeyCells, Range(Target.Address)) _ Is Nothing Then Worksheets("Dashboard").Range("H58") = Format(Date - (Weekday(Date, vbFriday) - 1), "dd-mmm-yy") End If End Sub [代码]跨度>
-
工作表计算没有
ByVal Target As Range,无法添加。您将需要存储数据的副本并检查它是否已更改。然后,如果它更改了复制数据并将其粘贴到旧副本上并更改日期。您不能只添加ByVal Target As Range并期望它起作用。