简体   繁体   中英

VBA rejecting empty Range of SpecialCells

I'm having a problem with a "For Each" related to a Range defined by a SpecialCells method. When I run the code below, there is a "Next without For" error, which I believe is because the rRange is empty when I first run the code. I could put "On Error Resume Next" in the beggining of the sub, but I'm trying to avoid this.

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

In another sub, I'm having a "No cells were selected" error after I run the code below. I really don't know how to actually solve the errors in these subs, but you guys surely would know.

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

Thanks in advance.

As pointed out in a comment by John Coleman, your first subroutine isn't working because you are missing an End If . You probably want:

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

This is one of the reasons that consistent indentation of code is useful - it highlights missing End If s, etc.


I would recommend you change your second subroutine as follows:

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

Also, if you are not already using Option Explicit at the start of your code module, I recommend you do so. (I'm hoping that you are already using it, and that the lack of variable declarations within each subroutine is simply because they have all been declared at the module level.)

Luis Filho, You need to insert:

     End If

before

     Next c

Another item you need to define is:

     atualizarefeitos6

Is this a variable or function?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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