首页 > 解决方案 > 插入行后清除某些列

问题描述

我有以下代码,它在双击要插入新行的上面的行后添加一行:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Target.Offset(1).EntireRow.Insert
    Target.EntireRow.Copy Target.Offset(1).EntireRow
    On Error Resume Next
    Target.Offset(1).EntireRow.SpecialCells (xlConstants).ClearContents
                        
End Sub

当您运行它时,它会使用 .ClearContents 清除所有内容的整行。

我希望看到的是,在最终用户双击一行后,会插入一个新行,但它只会清除 E 到 R 列以及 T 列中的内容。

所以,我尝试了这段代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Target.Offset(1).EntireRow.Insert
    Target.EntireRow.Copy Target.Offset(1).EntireRow
    On Error Resume Next
    Target.Offset(1).EntireRow.SpecialCells (xlConstants)
    
    'need to clear data from columns E through R and column T
    Target.Range("E:R").ClearContents
    Target.Range("T").ClearContents
                        
End Sub

我以为Target会选择该行,但除非我定义一个特定的单元格编号,否则它不起作用。换句话说,如果我将代码更改为此,它会起作用,但只会(并且总是)清除第 10 行:

Target.Range("E10:R10").ClearContents

但是行号可能会根据他们双击的位置而有所不同......但我不确定如何使这种动态变化。

任何帮助将不胜感激!

标签: excelvba

解决方案


使用Cells符号可能更容易。此方法也使用该Union方法。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True
Target.Offset(1).EntireRow.Insert
Target.EntireRow.Copy Target.Offset(1).EntireRow
On Error Resume Next
Target.Offset(1).EntireRow.SpecialCells (xlConstants)
On Error GoTo 0

'need to clear data from columns E through R and column T
Union(Range(Cells(Target.Row, "E"), Cells(Target.Row, "R")), Cells(Target.Row, "T")).offset(1).ClearContents
                        
End Sub

推荐阅读