【发布时间】:2020-02-10 18:12:11
【问题描述】:
我在 Excel 中有一个工作表,其中包含使用此 VBA 宏的单元格(使用两个参数,它计算所有工作表中 Arg#2 范围内 arg#1 的出现次数,并返回总计数):
Public Function WBCountString(SearchFor As String, InRange As Range) As Long
Dim wbcs As Long, rng As Range, addr As String
For Each s In Worksheets
addr = InRange.Address
Set rng = s.Range(addr)
wbcs = wbcs + Application.WorksheetFunction.CountIf(rng, SearchFor)
Next s
WBCountString = wbcs
End Function
宏在一个单元格中用作函数,如下图所示,它使用位于A:A的单元格作为参数:
当我更改 A:A 单元格值时,使用脚本的单元格的值不会更改,我必须单击公式并按“Enter”才能更新值。
我尝试在“ThisWorkbook”中使用此功能,我得到一个“更改”消息框,但 F:F 中的单元格没有更新或更改值:
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
' runs when a sheet is changed
MsgBox "Change."
Application.Calculate
End Sub
每次更新工作簿的任何工作表上的任何单元格 A:A 时,如何使使用此宏的单元格更新?
【问题讨论】:
-
使用
Workbook_SheetChange事件。 -
我尝试使用它但它不起作用,我不明白如何将它应用于这个问题。我看过诸如this one 之类的页面,但无法将其应用于我的问题(在特定 Excel 单元格中调用的函数)。你有适用于这个特定问题的示例代码吗?例如。如何提及更新使用该功能的单元格?
-
我推荐 workbook 级别的事件,该事件在 any 工作表更改时发生。您使用了工作表级别的事件。
-
我确实使用了我在 VBAProject 的“ThisWorkbook”部分中提供的 URL 中的代码,但我不知道如何将它应用于这个特定问题,因为我不能只调用 WBCountString 函数一个“workbook_sheetchange”函数,因为它接受在 F 列的 Excel 工作表中指定的参数,并且每个单元格都不同。你有适用于这个特定问题的示例代码吗?例如。如何提及更新使用该功能的单元格?
-
您可以将计算限制在相关范围内。