![](/img/trans.png)
[英]vba excel : runtime error 1004 method range of object _global failed
[英]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
。
不合格的Range
, Cells
, Rows
, Columns
和Names
调用都隐式地引用ActiveSheet
,对此事实的误解是侧面栏中每个“ Related”问题(无论如何我都检查过)背后的原因,并且此站点上成千上万的同一个内容:这是错误的极其常见的来源。 因此, 限定工作表成员调用并避免出现问题。
您的代码碰巧可以正常工作(嗯,鉴于上述修改)。 如果将With ActiveSheet
块更改为With Sheet12
,您将开始看到源于所有不合格Range
调用的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.