VBA拒绝空的特殊细胞范围

时间:2016-11-04 00:29:47

标签: excel vba excel-vba range

我遇到了与ForCells方法定义的Range相关的“For Each”问题。当我运行下面的代码时,会出现“Next without For”错误,我认为这是因为当我第一次运行代码时rRange为空。我可以在sub的开头放置“On Error Resume Next”,但我试图避免这种情况。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

正如约翰科尔曼在评论中所指出的那样,你的第一个子程序因为缺少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

这是一致的代码缩进有用的原因之一 - 它突出显示缺少End If等等。

我建议您更改第二个子程序,如下所示:

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,我建议您这样做。 (我希望您已经在使用它,并且每个子例程中缺少变量声明只是因为它们都已在模块级别声明。)

答案 1 :(得分:0)

Luis Filho, 你需要插入:

     End If

     Next c

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

     atualizarefeitos6

这是变量还是函数?