如何测试Excel中的Range是否包含单元格?

Lan*_*rts 5 excel vba event-handling excel-vba

我在Worksheet_Change事件中发现了Excel/VBA中的问题.我需要将Target.Dependents分配给一个Range,但如果它没有依赖,则会出现错误.我试过测试Target.Dependents.Cells.Count但是没有用.有任何想法吗?

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 OR Target.Dependents.Cells.Count = 0 Then Exit Sub

Dim TestRange As Range

Set TestRange = Target.Dependents
Run Code Online (Sandbox Code Playgroud)

我也试过"Target.Dependents Is Nothing".

Oor*_*ang 10

简短的回答,没有办法在没有引发错误的情况下测试家属,因为属性本​​身被设置为在访问时引发错误且没有任何错误.我不喜欢这个设计,但没有办法在没有压制错误的情况下阻止它.AFAIK这是你能用它做的最好的事情.

Sub Example()
    Dim rng As Excel.Range
    Set rng = Excel.Selection
    If HasDependents(rng) Then
        MsgBox rng.Dependents.Count & " dependancies found."
    Else
        MsgBox "No dependancies found."
    End If
End Sub

Public Function HasDependents(ByVal target As Excel.Range) As Boolean
    On Error Resume Next
    HasDependents = target.Dependents.Count
End Function
Run Code Online (Sandbox Code Playgroud)

解释,如果没有依赖项,则引发错误并且HasDependents的值保持不变,类型为default,即false,因此返回false.如果家属,计值永远不会为零.所有非零整数都转换为true,因此当count被指定为返回值时,返回true.它与你已经使用的非常接近.