【问题标题】:Excel VBA, select a block of row downExcel VBA,向下选择一行
【发布时间】:2015-07-07 17:38:22
【问题描述】:

我有一个这样的子:

 Sub deleteExcessData(selectSheet As String, selectRow As Integer)   
    'selectSheet = go to a certain sheet
    'selectRow = go to a certain row

 End Sub

我想要做的是选择一行开始,然后选择该行下方的所有非空白行一直到底部,然后删除该选择。 (这可以包括该行或不包括该行)

我只想在这个 sub 中使用 2 个变量,一个是选择工作表,一个是用来选择锚行。数据是连续的。

如果数据中有一些随机的空白单元格怎么办?

有什么建议吗?

【问题讨论】:

  • 现代 Excel 工作表有 1,048,576 行。将selectRow As Integer 更改为selectRow As Long

标签: vba excel


【解决方案1】:

试试这样的:

Sub deleteExcessData(selectSheet As String, selectRow As Integer)
    lastRow = Worksheets(selectSheet).Cells(1, 1).End(xlDown).Row
    Worksheets(selectSheet).Rows(selectRow & ":" & lastRow).Delete
End Sub

如果你需要从底部向上,试试这个:

Sub deleteExcessData(selectSheet As String, selectRow As Integer)
    lastRow = Worksheets(selectSheet).Cell(Row.Count, 1).End(xlUp).Row
    Worksheets(selectSheet).Rows(selectRow & ":" & lastRow).Delete
End Sub

【讨论】:

  • 并且一定要先在一些测试数据上尝试一下。
  • 数据中有几个空白单元格怎么办?
  • 我相信你的第一个子只删除了第 1,048,576 行。您尚未将范围引用从开始扩展到底部。
  • 所以我用这个尝试了你的代码(第一部分):调用 deleteExcessData("data", 5) 它给了我“对象不支持这个属性或方法”。你的第二个代码在第二行给了我“需要的对象”。我已经将全局 lastRow 变量声明为 Long。
  • 它是否将您指向发生错误的行?也一定要试试@Jeeped 的回答。
【解决方案2】:

这应该删除工作表底部的所有行,包括被调用的行。

Sub test()
    Call deleteExcessData("Sheet1", 9)
End Sub

Sub deleteExcessData(selectSheet As String, selectRow As Long)
    With Sheets(selectSheet).Cells(selectRow, 1)
        .Resize(Rows.Count - selectRow + 1, 1).EntireRow.Delete
    End With
End Sub

以上内容删除了 9:1048576 中的所有行。

如果调用子程序已经定义了名称,您可以交替传递工作表对象而不是名称。

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多