工作表循环用户定义的函数故障



我正在Excel中在包含多个选项卡的工作簿上编写一些VBA代码,其中大多数选项卡都包含一个表。我正在创建一个用户定义的函数,以计算每个工作表上单个列中给定输入组合(两个输入)的所有实例。我意识到可能有非 vba 解决方法,但我想在进行更新时将此工作簿保留为尽可能少的手动操作。目前它不包含很多单元格,但它可能会向前发展。

例如:给定"质量"和"立即到期",我想计算在每个工作表表格的给定列中有多少个这种组合的实例作为"质量:立即到期"。然后,总计应作为整数输出到初始工作表(摘要页面),其中函数在特定单元格中调用。

我已经四处寻找了一些帮助,但我的函数不断收到"#VALUE"错误,目前无法弄清楚。我仍然是 VBA 的新手,所以如果我做了一些愚蠢的事情,请给我一些解释。我将不胜感激!

这是我的模块:

Function StatusCounterByDepartment(Department As String, Status As String)
Dim Counter As Integer: Counter = 0
For i = 2 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(i).Activate
For j = 2 To ActiveSheet.ListObjects(1).Rows.Count
If (ActiveSheet.Range("H" & j).Value = Department & ": " & Status) Then
Counter = Counter + 1
End If
Next j
Next i
StatusCounterByDepartment = Counter
End Function

我的思考过程是循环浏览给定的列,直到列长度的末尾,评估它是否符合我的条件,为活动工作表中的每个实例向我的计数器添加 1,然后循环浏览其余工作表,直到我得到最终计数。然后,将该最终计数报告为我的函数的返回值。

感谢您可以提供的任何帮助!

这根本不健壮,但我只是在修复最初的事情。您可能希望添加适当的错误处理来处理表不存在,作为要执行的其他操作的示例。

Public Sub count()
MsgBox StatusCounterByDepartment("Quality", "Due Immediately")
End Sub
Public Function StatusCounterByDepartment(ByVal Department As String, ByVal Status As String) As Long
Dim Counter As Long
Counter = 0
For i = 2 To ThisWorkbook.Sheets.count
With ThisWorkbook.Sheets(i)
On Error Resume Next
For j = 2 To (1 + .ListObjects(1).DataBodyRange.Rows.count)
If (.Range("H" & j).Value = Department & ": " & Status) Then
Counter = Counter + 1
End If
Next j
On Error GoTo 0
End With
Next i
StatusCounterByDepartment = Counter
End Function

最新更新