2

我正在继续努力处理从大型机中提取的数据。目前,我正在继续对用于表单和潜在数据处理等的数据进行排序。这些数据是字母数字的,在形式上与我之前关于我持续数据工作的问题之一相似。

我当前的开发线之一涉及以启用宏的按钮的形式提高可用性。一个这样的按钮涉及一个宏,该宏旨在删除从 A2 到工作表中任何现有数据行末尾的一列“A”中的所有数据。

代码如下:

Sub DeleteCriteria_Click()

Dim CriteriaRange As Range

Dim LastCriteriaCell As Long

With Sheets("Criteria")
    LastCriteriaCell = .Range("A" & Sheets("Criteria").Rows.Count).End(xlUp).Row
    Set CriteriaRange = .Range("A2:A" & LastCriteriaCell)
End With

CriteriaRange.Cells.Select

Selection.Delete

End Sub

奇怪的是,每次我激活按钮时,这段代码都会将我的列移动一格,并最终通过重复点击删除我的标题和后续列。此行为类似于列的正常删除函数。重构范围命令CriteriaRange.Cells.Select| Selection.Delete进入表格CriteriaRange.Cells.DeleteCriteriaRange.Delete并没有纠正这个问题。

我的意图是完全删除条目,以便在删除条目后输入新条件时没有空白或剩余数据集。因此,我有两个问题:

1)是什么导致了这种行为,即我做错了什么,在这里?

2)如何纠正这种行为以完全删除单元格或在功能上执行等效操作,从而防止对空白或空单元格的任何引用,同时保留我的列?

4

1 回答 1

2

将您的代码更改为

CriteriaRange.Delete Shift:=xlUp

默认是

CriteriaRange.Delete Shift:=xlToLeft

因此,您的列被移动。

你的代码可以写成

Sub DeleteCriteria_Click()
    Dim LastCriteriaCell As Long

    With Sheets("Criteria")
        LastCriteriaCell = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> This is required so that your header cells are not touched
        If LastCriteriaCell < 2 Then Exit Sub

        .Range("A2:A" & LastCriteriaCell).Delete Shift:=xlUp
    End With
End Sub

或者

Sub DeleteCriteria_Click()
    Dim LastCriteriaCell As Long

    With Sheets("Criteria")
        LastCriteriaCell = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> This is required so that your header cells are not touched
        If LastCriteriaCell >= 2 Then _
        .Range("A2:A" & LastCriteriaCell).Delete Shift:=xlUp
    End With
End Sub
于 2012-08-13T16:21:21.517 回答