删除整个行不会删除行,代码会继续运行,没有错误

时间:2018-12-28 07:50:42

标签: excel vba

在Excel中使用VBA删除整个行;代码运行,不删除行,不引发任何错误。

我的例程使用Workbooks.Open filName打开一个现有文件,其中filName是一个字符串变量。文件最初是使用wbTemp.SaveAs fileName:=MyFileName, FileFormat:=xlOpenXMLWorkbook

保存的

该例程在特定单元格上执行操作,然后在操作完成后调用以删除整行。但是,要删除的行仍然存在,代码继续运行,并且不会引发任何错误。我可以(在调试过程中)在Excel中手动删除该行。数据在常规单元格中,而不是表格式。工作表不受保护,没有打开文件的密码,也没有其他已知的异常现象可以解释为什么删除行功能不起作用。

这是工作簿中的一个模块,显示计划的和已完成的课程作业并计算GPA。其他模块创建一组特定的课程,并将现有成绩导入电子表格。

该模块用于在每学期发布成绩后更新电子表格。

在创建工作簿并导入成绩时,此特定的代码行(在不同的子目录中)可以完美地在成绩导入模块中使用。

此例程中的所有代码行都可以在打开的文件中使用,Rows(ActiveCell.Row).EntireRow.Delete行除外。这些删除行的行是整个代码中唯一的麻烦根源。

这些过程存在于启用了宏的模板工作簿(.xltm)中,并在由模板(.xlsx)打开的文件上运行。从一个工作簿切换到另一工作簿的命令完全可以正常工作。

我将Rows(ActiveCell.Row).EntireRow.Delete替换为Rows(80).EntireRow.Delete,但行为没有改变。

这个让我难过。任何帮助将不胜感激。

Private Sub cmdUpdateGrades_Click()

/// preliminary operations - all work correctly

lastrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

j = 80

ActiveSheet.Range("A80").Activate

Do While j <= lastrow
    If ActiveCell.Value = "Course" Or ActiveCell.Value = "" Or _ 
ActiveCell.Value = "Term" Or ActiveCell.Value = "Cumulative" Then
        Rows(ActiveCell.Row).EntireRow.Delete
        j = j + 1
    ElseIf Left(ActiveCell.Value, 5) = "Term:" Then

/// other operations - work correctly

        Rows(ActiveCell.Row).EntireRow.Delete
        j = j + 1
    Else

/// other operations - work correctly

        ActiveSheet.Range("A80").Activate
        Rows(ActiveCell.Row).EntireRow.Delete
        j = j + 1
    End If
Loop

/// other operations 

End Sub

1 个答案:

答案 0 :(得分:0)

优化?

您应该使用:

ActiveCell.EntireRow.Delete

如果您发布整个代码,则可以对其进行优化以使其运行更加顺畅。