【问题标题】:VBA Excel delete multiple rowsVBA Excel删除多行
【发布时间】:2018-02-21 01:20:23
【问题描述】:

这行得通

  mySheet.Rows(CStr(activeRow) & ":" & CStr(activeRow + deletedRowAmount)).Delete

这不起作用

mySheet.Columns(CStr(columDelete) & ":" & CStr(columDelete + deletedRowAmount)).Delete

我在这里缺少什么?

ERROR 是 VBA 运行时错误 1004 “应用程序定义或对象定义错误”

【问题讨论】:

  • 变量的值是多少?他们声明了什么?您遇到什么错误?
  • 变量是长变量

标签: vba excel


【解决方案1】:

总的来说,Scott Craner 所说的已经足够了,但这里有一种方法可以绕过它并让它变得更容易:

Sub TestMe()

    Columns(GetColumnRange(2, 5)).Delete

End Sub

Public Function GetColumnRange(colStart As Long, colEnd) As String

    GetColumnRange = Split(Cells(1, colStart).Address(True, False), "$")(0) & _
              ":" & Split(Cells(1, colEnd).Address(True, False), "$")(0)

End Function

试试TestMe函数,它应该删除从2(B)5(E)的列。

【讨论】:

  • 因为这可能更容易理解,事实上 vba 需要将结果字符串解析回数字,这将增加时间,尽管只有几分之一秒。这就像将您的汽车直流输出更改为交流电,只是为了将其转换回直流电为您的手机充电。如果在循环中完成,性能会有所不同。
  • @ScottCraner - 是的,可能会丢失几分之一秒。
  • 这只是一个 FWIW 评论,如果它更易于理解和使用,OP 可能愿意付出时间回报。
  • @ScottCraner - 我知道 :)
  • 谢谢你的建议,但是我已经有很多方法了,不方便制作新的:-)
【解决方案2】:

当您在字符串中使用它们时,列是 A、B、C、...。如果它们是数字,则需要稍有不同:

With mySheet    
    .Range(.cells(1,columDelete), .cells(1,columDelete + deletedRowAmount)).EntireColumn.Delete
End With

【讨论】:

  • 谢谢伙计。非常有用的一段代码。作为一个新手,很难理解 VBA 不合逻辑的语法。
猜你喜欢
  • 2012-03-11
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
相关资源
最近更新 更多