选择 table 中的任意单元格后打开用户窗体

Open UserForm upon selecting any cell in a table

我正在使用以下代码在用户选择 table 中的单元格时打开用户表单,其中每个 table 有 30 行,一个 table 中有多个 sheet。我将不得不一次又一次地写100行。

我知道这不是一个有效的方法。如何在不影响功能的情况下使此代码更简单、更短?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

If Target.Address = "$D:$E" Then
 Open_Text_Form
End If

End Sub

您可以使用相交函数来查找范围(单元格)是否在给定范围内。不知道 sheet 中的数据是如何设置的,我不能说最好的检查方法是什么。如果 sheet 上的多个 "tables" 实际上是 Excel 表格,您可以执行类似的操作来让它检查您是否在其中一个表格中单击。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim tableRange As Range

For i = 1 To ListObjects.Count

    If i = 1 Then
        Set tableRange = ListObjects(i).DataBodyRange
    Else
        Set tableRange = Application.Union(tableRange, ListObjects(i).DataBodyRange)
    End If

Next

If tableRange Is Nothing Then Exit Sub

If Not Application.Intersect(Target, tableRange) Is Nothing Then
    Open_Text_Form
End If

End Sub

但是,如果 sheet 中的 "tables" 只是普通数据范围,您可以在命名范围内定义它们,您需要做的就是

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Application.Intersect(Target, Range("MyNamedRange")) Is Nothing Then
    Open_Text_Form
End If

End Sub