繁体   English   中英

对象'_global'的Excel VBA方法'Range'失败错误1004

[英]Excel VBA Method 'Range' of object'_global' failed error 1004

我无法弄清楚为什么我的do while语句会出现“对象'_global'的'范围'失败”的原因。 这就好像无法识别名为RC3的范围。 任何帮助是极大的赞赏。

Sub DeleteBlankRows()

Dim Allrws As Range
Dim Rws As Range
Dim RC2 As Range
Dim RC3 As Range
Dim I As Integer
Dim CopyRange As Range
Dim LastRow As Long

With Application

'.ScreenUpdating = False ' don't spam the interface with selections

    With ActiveSheet

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' Put the number of the last row in LastRow

    End With

    Set Allrws = Range("A2:S" & CStr(LastRow))  ' set range to be observed

    For Each Rws In Allrws.Rows   ' for each row in the range of Allrws call it Rws and do the following with it

        Set RC2 = Rws.Offset(0, 3).Resize(1, 1)      ' move and resize the range of RC2 to include only the cell under column D
        Set RC3 = Rws.Offset(0, 7).Resize(1, 1)      ' move and resize the range of RC3 to include only the cell under column I        
        I = 0   ' initilize the rows deleted counter

            Do While (Range(RC3).Value <> "" And I < 30)    ' as long as RC points to a empty cell and we haven't removed more then 30 rows keep removing rows                                                             

                If (range(RC2).Value = "Permit & Design" Or range(RC2).Value = "Miscellanious") Then 'don't delete row if Permit & Design or Miscellanious is in the cell under column D

                  I = 30        ' escape the loop if true

                Else

                  Selection.EntireRow.Delete      ' delete the selected row if false

                  I = I + 1                       ' add 1 to the counter

                End If        

            Loop                                   ' Go back to the start of the Do While

    Next Rws                    ' go back to the For Each and put the next row in Rws

    .ScreenUpdating = True      ' now update the interface with the changes

end with

end sub
Do While (Range(RC3).Value <> "" And I < 30)

RC3是一个Range对象 Range(SomeRangeObject)所做的实际上是Range(SomeRangeObject.Value) ,因此,除非RC3.Value包含有效的范围地址字符串,否则不合格的 Range调用将被炸毁。

注意不合格 :您的代码隐含地ActiveSheet

Set Allrws = Range("A2:S" & CStr(LastRow))

每当使用Range这样时,它都会通过_Global隐藏模块隐式地执行ActiveSheet.Range

不合格的RangeCellsRowsColumnsNames调用都隐式地引用ActiveSheet ,对此事实的误解是侧面栏中每个“ Related”问题(无论如何我都检查过)背后的原因,并且此站点上成千上万的同一个内容:这是错误的极其常见的来源。 因此, 限定工作表成员调用并避免出现问题。

您的代码碰巧可以正常工作(嗯,鉴于上述修改)。 如果将With ActiveSheet块更改为With Sheet12 ,您将开始看到源于所有不合格Range调用的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM