如何通过仅选择表正下方行中的任何单元格来触发宏(ListObject)

Posted

技术标签:

【中文标题】如何通过仅选择表正下方行中的任何单元格来触发宏(ListObject)【英文标题】:How to trigger a Macro by ONLY selecting any cell in the row directly below a table (ListObject) 【发布时间】:2021-09-22 04:32:18 【问题描述】:

我目前有下面的代码,当您单击/选择表格下方行中的任何单元格时触发我的Addrecordtotable(我的代码中的命名范围:“Table2”)而且 表格中 的任何单元格。

当您单击/选择行中的任何单元格直接在列表对象/表下方时,我该如何限制代码触发宏?

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

【问题讨论】:

如果我是正确的,您将整个“Table2”范围向下移动一行。您也必须将其修剪为一行。 【参考方案1】:

问题是Range("Table2").Offset(1) 偏移了整个表格的范围。所以范围现在是表格的大小,但向下一行。

您实际需要做的是减少表格的行数(因此范围从表格下方的行开始,然后将其调整为一行。 p>

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

另请注意,您应该在此处使用 Target 而不是 Selection。并且您需要使用CountLarge 而不是Count,否则如果您选择工作表的所有单元格,则会出现溢出错误。

【讨论】:

以上是关于如何通过仅选择表正下方行中的任何单元格来触发宏(ListObject)的主要内容,如果未能解决你的问题,请参考以下文章

C#/我通过随机选择下一个单元格来填充字符串数组中的 DataGridView,并且不想再次选择使用过的单元格

仅更改活动工作表上的值

如何收听CytoscapeJS节点的拖动事件(仅包括光标/手指正下方的事件)

Word宏用于仅从某些表格单元格中删除颜色

单击 Excel 中的超链接会在运行宏之前清除范围选择

如何从GridView项目中删除SQLite数据?