【问题标题】:1004, Application-defined or Object-defined error when setting a Range as a variable with `.End(xlDown)` function1004, 使用 `.End(xlDown)` 函数将 Range 设置为变量时,应用程序定义或对象定义错误
【发布时间】:2018-07-03 11:57:21
【问题描述】:

我编写了一个代码来删除第五列中单元格值为 0 的行:

Sub deletedata()

Dim i As Integer
Dim n As Integer
Dim ws3 As Worksheet
Set ws3 = ThisWorkbook.Worksheets("3.Calidad CREDITICIA")
Dim r As Range
Set r = ws3.Range("E20", Range("E20").End(xlDown))
n = r.Cells.Count

With ws3
         For i = n + 20 To 20
            If IsNumeric(.Cells(i, 5)) And .Cells(i, 5) = 0 Then
                .Rows(i & ":" & i).Delete
            End If
            Next i
    End With

End Sub

当它到达我设置 r 范围的指令时:Set r = ws3.Range("E20", Range("E20").End(xlDown)) 我得到 1004 错误:

1004,应用程序定义或对象定义

我尝试了很多东西,在它们之间我尝试了一个 MyCell 循环,但在设置范围时我仍然收到错误 ¿ 谁能告诉我我做错了什么?

【问题讨论】:

  • 工作表是否受到保护?或者 VBA 代码可能在工作表上而不是在模块中?
  • 代码在 Thisworkbook 而不是模块中,你能解释一下为什么这个事实会使这段代码无法工作吗?
  • 我不能给你详细的解释。但我在我的 VBA 项目中经历过这种情况。

标签: vba loops range


【解决方案1】:

问题可能与对ActiveSheet 的隐式引用有关:

                        ' Right here
Set r = ws3.Range("E20", Range("E20").End(xlDown))

试试这个:

Set r = ws3.Range("E20", ws3.Range("E20").End(xlDown))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多