问题描述
我目前有下面的代码,当您单击/选择表格下方行中的任何单元格(我的代码中的命名范围:“Table2”)时,它会触发我的 Addrecordtotable
而且 表格中的任何单元格。
当您单击/选择仅在 ListObject/table 正下方行中的任何单元格时,如何限制代码以触发宏?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Count = 1 Then
If Not Intersect(Target,Range("Table2").Offset(1)) Is nothing Then
Call Addrecordtotable
End If
End If
End Sub
解决方法
问题是 Range("Table2").Offset(1)
偏移了整个表的范围。所以范围现在是表格的大小,但向下一行。
您实际上需要的是减少表格的行数(因此范围开始在表格下方的行中,然后将其调整为一行。 >
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.CountLarge = 1 Then
If Not Intersect(Target,Me.Range("Table2").Offset(RowOffset:=Me.Range("Table2").Rows.Count).Resize(RowSize:=1)) Is Nothing Then
Call Addrecordtotable
End If
End If
End Sub
另请注意,此处应使用 Selection
而不是 Target
。并且您需要使用 CountLarge
而不是 Count
,否则如果您选择工作表的所有单元格,则会出现溢出错误。