VBA拒绝空的范围的SpecialCells

我遇到与SpecialCells方法定义的Range有关的“For Each”问题。 当我运行下面的代码时,有一个“Next without For”错误,我相信这是因为当我第一次运行代码时rRange是空的。 我可以把“On Error Resume Next”放在sub的开始,但我试图避免这一点。

Public Sub Sub1() Set rRange = Worksheets("Combate").Range("69:99").SpecialCells(xlCellTypeConstants, xlNumbers) If Not rRange Is Nothing Then For Each c In rRange If c.Value <= turnoseg Then c.Offset(-2 * lincomb0 + 6).Value = c.Offset(-lincomb0 + 3).Value c.Value = "" Next c atualizarefeitos6 End If End Sub 

在另一个子节点中,我运行下面的代码后,出现“未选中单元格”错误。 我真的不知道如何真正解决这些潜艇的错误,但你们肯定会知道。

 Sub efeitosaddatac6() 'On Error Resume Next Set rRange = Worksheets("Combate").Range("69:99").SpecialCells(xlCellTypeConstants, xlNumbers) For Each c In rRange c.Value = c.Value + 1 Next c atualizarefeitos6 End Sub 

提前致谢。

正如约翰·科尔曼(John Coleman)的评论所指出的那样,你的第一个子程序不工作,因为你缺less一个End If 。 你可能想要:

 Public Sub Sub1() Set rRange = Worksheets("Combate").Range("69:99").SpecialCells(xlCellTypeConstants, xlNumbers) If Not rRange Is Nothing Then For Each c In rRange If c.Value <= turnoseg Then c.Offset(-2 * lincomb0 + 6).Value = c.Offset(-lincomb0 + 3).Value c.Value = "" End If Next c atualizarefeitos6 End If End Sub 

这是代码的一致缩进是有用的原因之一 – 它强调缺lessEnd If s等。


我build议你改变你的第二个子程序如下:

 Sub efeitosaddatac6() Set rRange = Nothing On Error Resume Next Set rRange = Worksheets("Combate").Range("69:99").SpecialCells(xlCellTypeConstants, xlNumbers) On Error GoTo 0 If Not rRange Is Nothing Then For Each c In rRange c.Value = c.Value + 1 Next c atualizarefeitos6 End If End Sub 

另外,如果您在代码模块的开始处尚未使用Option Explicit ,则build议您这样做。 (我希望你已经在使用它,并且每个子例程中缺lessvariables声明仅仅是因为它们已经在模块级声明了。)

路易斯·菲略,你需要插入:

  End If 

之前

  Next c 

另一个你需要定义的项目是:

  atualizarefeitos6 

这是一个variables或function?