Worksheet.Change事件中Target.Count>1时如何判断影响行/列?
在Worksheet.Change事件中判断粘贴区域的行/列范围
不用纠结Target.Count,直接用Range对象自带的Rows.Count和Columns.Count属性就能准确获取目标区域的行数和列数,完全可以区分是多行、多列还是两者皆有。
修改后的完整代码
Private Sub Worksheet_Change(ByVal Target As Range) ' 注意:VBA中需逐个声明变量类型,否则前三个变量会默认是Variant Dim CurrentColumn As Integer, CurrentRow As Integer Dim NumRows As Integer, NumCols As Integer CurrentColumn = Target.Column CurrentRow = Target.Row If Target.Count > 1 Then ' 获取目标区域的总行数和总列数 NumRows = Target.Rows.Count NumCols = Target.Columns.Count ' 根据行数和列数判断范围类型 If NumRows > 1 And NumCols = 1 Then ' 情况1:仅多行(单列多行) MsgBox "粘贴了" & NumRows & "行单列内容" ElseIf NumCols > 1 And NumRows = 1 Then ' 情况2:仅多列(单行多列) MsgBox "粘贴了" & NumCols & "列单行内容" ElseIf NumRows > 1 And NumCols > 1 Then ' 情况3:多行多列 MsgBox "粘贴了" & NumRows & "行" & NumCols & "列内容" End If End If End Sub
关键说明
Target.Rows.Count:返回目标区域包含的总行数,比如粘贴3行1列时,这个值是3Target.Columns.Count:返回目标区域包含的总列数,比如粘贴1行4列时,这个值是4- 通过对比这两个值是否大于1,就能精准判断粘贴的区域是单行多列、单列多行,还是多行多列的矩形区域
另外补充个小细节:原代码的变量声明Dim CurrentColumn, CurrentRow, NumRows, NumCols As Integer存在问题,VBA中只有最后一个变量NumCols会被声明为Integer,前面三个默认是Variant类型,建议逐个明确声明类型,避免潜在的类型错误。
内容的提问来源于stack exchange,提问作者Michelle Kosloff
相关产品推荐
相关产品推荐

