Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如果存在某个值,则跳过循环的迭代_Vba_Excel_If Statement_Foreach_Iteration - Fatal编程技术网

Vba 如果存在某个值,则跳过循环的迭代

Vba 如果存在某个值,则跳过循环的迭代,vba,excel,if-statement,foreach,iteration,Vba,Excel,If Statement,Foreach,Iteration,我有下面的代码,它在特定范围的行中进行迭代,如果存在一个值,那么代码将创建整个页面的副本。我关心的是r1迭代中代码的底部。它最初只有一个条件语句 如果BiDiRowValidr1 我想添加第二个条件语句,我做到了 and Range("MAIN_BIDI_PINMC") <> "No BiDi" 因为RangeMAIN_BIDI_PINMC不是一个单元格,所以会出现该错误。要在多个单元格中检查值,可以使用Application.Worksheetfunction.Countif 编

我有下面的代码,它在特定范围的行中进行迭代,如果存在一个值,那么代码将创建整个页面的副本。我关心的是r1迭代中代码的底部。它最初只有一个条件语句

如果BiDiRowValidr1

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

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

因为RangeMAIN_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

因为RangeMAIN_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

那是因为RangeMAIN_BIDI_PINMC不是一个单一的细胞,我猜?对。它是一系列细胞。我是否有办法访问该范围内的每个特定单元格值?也许还可以迭代该范围?我尝试在结尾添加.value,认为它可以访问每个特定的值。但请不要认为这是正确的。请使用Application.Worksheetfunction.Countif检查是否存在该单词:If IsBiDiRowValidr1和Application.Worksheetfunction.CountifRangeMAIN\u BIDI\u PINMC,No BIDI=0,则表示未找到。阅读excel帮助中的Countif:这是因为RangeMAIN_BIDI_PINMC不是一个单元格,我猜?正确。它是一系列细胞。我是否有办法访问该范围内的每个特定单元格值?也许还可以迭代该范围?我尝试在结尾添加.value,认为它可以访问每个特定的值。但请不要认为这是正确的。请使用Application.Worksheetfunction.Countif检查是否存在该单词:If IsBiDiRowValidr1和Application.Worksheetfunction.CountifRangeMAIN\u BIDI\u PINMC,No BIDI=0,则表示未找到。阅读excel帮助中的Countif:我正在使用上面编辑的代码。我把这两个条件改变后的行扔进手表,看看它们分别是什么值。该代码在一个pin上进行测试,该pin没有说No Bidi,而是一个数值。手表告诉我IsBiDiRow是真的,但是CountIf值是假的,当它应该读为真的时候。然后跳转到ElseIf语句,因为它读起来不是真的。我不知道它为什么读错了。nFound的价值是什么?我不是像你在代码中写的那样重新定义它,我是在我的原始问题中使用我编辑的代码。但是Application.WorksheetFunction.CountifRangeMAIN\u BIDI\u PINMC,如果单元格没有说No BIDI,并且如果单元格没有说No BIDI,则No BIDI值为FALSE。有没有办法知道它在计算什么单元格?它应该给你一个数字,而不是真/假?我明白。Countif返回一个长值,而不是布尔值。你一定做错了什么:我正在使用上面编辑的代码。我把这两个条件改变后的行扔进手表,看看它们分别是什么值。该代码在一个pin上进行测试,该pin没有说No Bidi,而是一个数值。手表告诉我IsBiDiRow是真的,但是CountIf值是假的,当它应该读为真的时候。然后跳转到ElseIf语句,因为它读起来不是真的。我不知道它为什么读错了。nFound的价值是什么?我不是像你在代码中写的那样重新定义它,我是在我的原始问题中使用我编辑的代码。但是Application.WorksheetFunction.CountifRangeMAIN\u BIDI\u PINMC,如果单元格没有说No BIDI,并且如果单元格没有说No BIDI,则No BIDI值为FALSE。有没有办法知道它在计算什么单元格?它应该给你一个数字,而不是真/假?我明白。Countif返回一个长值,而不是布尔值。你一定做错了什么事: