我昨天要求similar question填充特定列列表中的一系列单元格。我的代码的这方面工作得很好,但现在我正在尝试创建一个清除宏来删除插入的行。
所有新插入的行在N列中都有空白单元格,所以我只是试图搜索N列中的所有单元格,找到空白,然后删除N和Y列之间的行。这就是我所拥有的我跑的时候却没有做任何事情?
非常感谢任何帮助!
Sub Clear_PCOTCS()
Dim myLastRow As Long
Dim myRow As Long
Application.ScreenUpdating = False
myLastRow = Cells(Rows.Count, "N").End(xlUp).Row
For myRow = myLastRow To 1 Step -1
If Len(Cells(myRow, "N")) = 1 And Cells(myRow, "N") = "" Then
Range(Cells(myRow + 1, "N"), Cells(myRow + 1, "Y")).Delete Shift:=xlDown 'CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next myRow
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
您的错误来自于将错误的枚举传递给if (ValueGenerated.Target is System.windows.form.control)
{
Control targetForm = ValueGenerated.Target as control;
targetForm.Invoke(ValueChanged,new object[]{this,args});
}
。它需要一个XlDeleteShiftDirection值,并且您传递XlDirection。请注意,虽然Range.Delete
和xlShiftUp
共享相同的值,但xlUp
(-4121)不是有效的xlDown
。
如果你需要做的就是当“N”列中的单元格为空时删除每一行(“N”和“Y”列之间),你就会过度思考它。首先,根据您要创建的XlDeleteShiftDirection
的形状,移位应默认为xlShiftUp
,因此您可以省略参数。其次,您需要删除您在此处应用的偏移量:
Range
删除您正在测试的行,而不是下面的行。你应该寻找更像这样的东西:
Range(Cells(myRow + 1, "N"), Cells(myRow + 1, "Y")).Delete