【发布时间】:2018-08-23 13:26:51
【问题描述】:
我希望以下代码执行以下操作:
- 在我在特定列中输入值后,计算一些内容并使用这些计算值分配单元格值
问题:
- 在我为另一个单元格赋值后,Worksheet.Change 事件将再次触发,这会重新启动子单元并导致无限循环
如何更改我的代码,使其不会陷入无限循环,并且每当我向正在使用的列添加值时,我想要更新的单元格将自动更新?
代码 - 我要添加值的列是 C 列:
Public Sub Worksheet_Change(ByVal Target As Range)
Dim xlApp As Application
Dim ws As Worksheet
Dim r As Range
Dim size As Long
Set xlApp = Excel.Application
Set ws = xlApp.ThisWorkbook.Worksheets("Sheet1")
'get length of this individual column
Set r = ws.Range(ws.Cells(2, 3), ws.Cells(ws.Rows.Count, 3).End(xlUp))
'test to see if I got the correct column: i do
r.Select
size = r.Count
With xlApp.WorksheetFunction
'test to see if the offset I got was correct: it is
r.Offset(0, 1).Select
'get average of big range
ws.Cells(3, 10).Value = .Average(r.Offset(0, 1)) ' <- here is where the change event will fire again
' presumably because i just changed a value.
'get standard deviation of big range's population
ws.Cells(3, 11).Value = .StDev_P(r.Offset(0, 1))
'test to see if the offset i got was correct: it is
r.Offset(0, 2).Select
ws.Cells(3, 12).Value = .Average(r.Offset(0, 2))
ws.Cells(3, 13).Value = .StDev_P(r.Offset(0, 2))
End With
Set xlApp = Nothing
Set ws = Nothing
Set r = Nothing
End Sub
感谢阅读!
【问题讨论】:
-
在更新值之前设置
Application.EnableEvents = False,然后在完成后将它们重新打开 ` = True`