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?