如果存在特定值,则跳过循环迭代

时间:2014-09-15 16:05:17

标签: vba excel-vba if-statement foreach iteration

我在下面的代码中迭代了特定范围的行,如果存在值(代码未见),则创建整个页面的副本。我关注的是r1迭代中代码的底部。它最初只有一个条件语句......

If BiDiRowValid(r1)

我想添加第二个条件语句,我做了......

and Range("MAIN_BIDI_PINMC") <> "No BiDi"

但是当我运行代码并且MAIN_BIDI_PINMC范围=“No BiDi”时,它出错并且没有超过该行。仅供参考:IsBiDiRowValid()是一个函数,它检查特定的r1是否为空,然后继续。在该子例程完成并退出之后,我的代码错误出现“类型不匹配错误”。我还在底部添加了ElseIf行,我没有得到那个代码,因为最顶层的错误,但我只是想确保我正确地编写这个迭代,并且还有其他什么需要完成。基本上,如果在范围内找到“NoBiDi”,我希望它跳过所有这些代码并转到下一个r1 ...这是我认为我写的...提前谢谢!

Private Sub start_new()
    Dim MC_List As Range
    Dim r1 As Range
    Dim biDiPinName As Range
    Dim Pin As String
    Dim mc As String
    Dim mType As String
    Dim tabName As String
    Dim rowNumber As Integer
    Dim pinmcSplit() As String
    Dim NoBidi As String

On Error GoTo start_biDi_tr_new_Error



    Set MC_List = Range("MAIN_PINMC_TABLE")
        Set biDiPinName = Range("MAIN_PIN2_NAME")



 For Each r1 In MC_List.Rows
        If IsBiDiRowValid(r1) And WorksheetFunction.CountIf(Worksheets("MAIN").Range("MAIN_BIDI_PINMC", "No Bidi") = 0 Then
            tabName = r1.Cells(1, 8)
            pinmcSplit = Split(tabName, "_")
            Pin = pinmcSplit(0)
            mc = pinmcSplit(1)
            mType = r1.Cells(1, 3)
        ElseIf WorksheetFunction.CountIf(Worksheets("MAIN").Range("MAIN_BIDI_PINMC"), "No Bidi") = 1 Then
        End If
         Next

1 个答案:

答案 0 :(得分:4)

您收到该错误,因为Range("MAIN_BIDI_PINMC")不是单个单元格。要检查多个单元格中的值,您可以使用Application.Worksheetfunction.Countif

修改

在聊天中发布讨论,用户想要遍历每个单元格。

Dim aCell As Range

For Each r1 In MC_List.Rows
    If IsBiDiRowValid(r1) Then
        For Each aCell In Worksheets("MAIN").Range("MAIN_BIDI_PINMC")
            If aCell.Value <> "No Bidi" Then
                tabName = r1.Cells(1, 8)
                pinmcSplit = Split(tabName, "_")
                Pin = pinmcSplit(0)
                mc = pinmcSplit(1)
                mType = r1.Cells(1, 3)
            End If
        Next
    ElseIf aCell.Value = "No Bidi" Then
        '~~> Do Something
    End If
Next