【问题标题】:Delete Entire Row doesn't delete row, code continues to run, no errorsDelete Entire Row 不删除行,代码继续运行,没有错误
【发布时间】:2018-12-28 16:38:06
【问题描述】:

在 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

【问题讨论】:

  • 你能留一份样本数据吗?循环在您的代码中存在问题。
  • 不要循环删除行。很慢 :) 见我的回答Here
  • @Siddharth Rout:很好,我会做同样的事情,但缺少代码的“///其他操作”部分。

标签: excel vba


【解决方案1】:

优化?

你应该使用:

ActiveCell.EntireRow.Delete

如果您发布整个代码,可以对其进行优化以更流畅地运行。

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多