我使用以下代码在用户的表格中选择单元格时打开用户表单,其中每个表格有30行,一个表格中有多个表格。我将不得不一次又一次地写出100行。
我知道这不是一种有效的方法。如何在不影响功能的情况下简化和缩短此代码?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$D$31:$E$31" Then
Open_Text_Form
End If
If Target.Address = "$D$32:$E$32" Then
Open_Text_Form
End If
If Target.Address = "$D$33:$E$33" Then
Open_Text_Form
End If
If Target.Address = "$D$34:$E$34" Then
Open_Text_Form
End If
If Target.Address = "$D$35:$E$35" Then
Open_Text_Form
End If
If Target.Address = "$D$36:$E$36" Then
Open_Text_Form
End If
If Target.Address = "$D$37:$E$37" Then
Open_Text_Form
End If
End Sub
答案 0 :(得分:0)
您可以使用“相交”功能查找范围(单元格)是否在给定范围内。如果不知道如何在工作表中设置数据,我无法说出最好的检查方法是什么。如果多个"表"在你的工作表上实际上是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
然而,如果"表"在工作表中只是您可以在命名范围内定义它们的正常数据范围,您需要做的就是
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