"Dependents.Count" 语句在 "Worksheet_SelectionChange" 子中使用时重新启动宏
"Dependents.Count" statement restarting macro when used in "Worksheet_SelectionChange" Sub
我正在尝试获取所选范围内的受抚养人数量(如果选择的单元格数量为一个)。当我使用以下代码时,它对所有单元格都没有任何错误(对于没有任何依赖项的单元格和具有依赖项的单元格)
'Case 1
Sub Example()
Dim rng As Excel.Range
Set rng = Excel.Selection
If Target.Count = 1 Then
If HasDependents(rng) Then
MsgBox rng.Dependents.Count & " dependancies found."
Else
MsgBox "No dependancies found."
End If
End If
End Sub
Public Function HasDependents(ByVal Something As Excel.Range) As Boolean
On Error Resume Next
HasDependents = Something.Dependents.Count
End Function
但是在Worksheet_SelectionChange中使用相同的逻辑时(如下代码所示)
'Case 2
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Count = 1 Then
If HasDependents(Target) Then
MsgBox Target.Dependents.Count & " dependancies found."
Else
MsgBox "No dependancies found."
End If
End If
End Sub
Public Function HasDependents(ByVal Something As Excel.Range) As Boolean
On Error Resume Next
HasDependents = Something.Dependents.Count
End Function
它适用于没有任何依赖项的单元格,但适用于具有依赖项的单元格 "Dependents.Count" 重新启动宏。执行后
HasDependents = Something.Dependents.Count
语句,宏重启并执行
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
再次。我的问题是
为什么宏在执行"Dependents.Count"后在第二种情况下重新启动?
对于"Worksheet_SelectionChange"我已经把代码放在Sheet代码区不在模块中。
请求 Dependents property 似乎会触发细胞 selection 事件。此外,每当找不到依赖项时,就会抛出 错误 1004:未找到单元格。。依赖项的检索似乎是递归的;进入每个发现的依赖项以找到另一层依赖项。
我通过添加禁用 Application.EnableEvents property 的调用来稳定您的流程,这样例程就不会被自己调用。
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Count = 1 Then
On Error GoTo bm_Err_Exit
Dim dc As Long
Application.EnableEvents = False
dc = Target.Dependents.Count
If CBool(dc) Then
'MsgBox Target.Address(0, 0) & Chr(10) & Chr(10) & _
dc & " dependancies found."
Debug.Print Target.Address(0, 0) & Chr(10) & _
dc & " dependancies found."
Else
'never reaches here; error 1004 is thrown when no dependents
'MsgBox "No dependancies found."
Debug.Print "No dependancies found."
End If
End If
bm_Safe_Exit:
Application.EnableEvents = True
Exit Sub
bm_Err_Exit:
Debug.Print Err.Number & ": " & Err.Description
Application.EnableEvents = True
End Sub
基本错误控制在当前 select 没有依赖项时报告 1004 错误。
¹ 您可能想探索 DirectDependents 属性 以及 Dependents property.
我正在尝试获取所选范围内的受抚养人数量(如果选择的单元格数量为一个)。当我使用以下代码时,它对所有单元格都没有任何错误(对于没有任何依赖项的单元格和具有依赖项的单元格)
'Case 1
Sub Example()
Dim rng As Excel.Range
Set rng = Excel.Selection
If Target.Count = 1 Then
If HasDependents(rng) Then
MsgBox rng.Dependents.Count & " dependancies found."
Else
MsgBox "No dependancies found."
End If
End If
End Sub
Public Function HasDependents(ByVal Something As Excel.Range) As Boolean
On Error Resume Next
HasDependents = Something.Dependents.Count
End Function
但是在Worksheet_SelectionChange中使用相同的逻辑时(如下代码所示)
'Case 2
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Count = 1 Then
If HasDependents(Target) Then
MsgBox Target.Dependents.Count & " dependancies found."
Else
MsgBox "No dependancies found."
End If
End If
End Sub
Public Function HasDependents(ByVal Something As Excel.Range) As Boolean
On Error Resume Next
HasDependents = Something.Dependents.Count
End Function
它适用于没有任何依赖项的单元格,但适用于具有依赖项的单元格 "Dependents.Count" 重新启动宏。执行后
HasDependents = Something.Dependents.Count
语句,宏重启并执行
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
再次。我的问题是
为什么宏在执行"Dependents.Count"后在第二种情况下重新启动?
对于"Worksheet_SelectionChange"我已经把代码放在Sheet代码区不在模块中。
请求 Dependents property 似乎会触发细胞 selection 事件。此外,每当找不到依赖项时,就会抛出 错误 1004:未找到单元格。。依赖项的检索似乎是递归的;进入每个发现的依赖项以找到另一层依赖项。
我通过添加禁用 Application.EnableEvents property 的调用来稳定您的流程,这样例程就不会被自己调用。
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Count = 1 Then
On Error GoTo bm_Err_Exit
Dim dc As Long
Application.EnableEvents = False
dc = Target.Dependents.Count
If CBool(dc) Then
'MsgBox Target.Address(0, 0) & Chr(10) & Chr(10) & _
dc & " dependancies found."
Debug.Print Target.Address(0, 0) & Chr(10) & _
dc & " dependancies found."
Else
'never reaches here; error 1004 is thrown when no dependents
'MsgBox "No dependancies found."
Debug.Print "No dependancies found."
End If
End If
bm_Safe_Exit:
Application.EnableEvents = True
Exit Sub
bm_Err_Exit:
Debug.Print Err.Number & ": " & Err.Description
Application.EnableEvents = True
End Sub
基本错误控制在当前 select 没有依赖项时报告 1004 错误。
¹ 您可能想探索 DirectDependents 属性 以及 Dependents property.