【问题标题】:VBA - Cannot return Value from within If Statement inside For LoopVBA - 无法从 For 循环内的 If 语句中返回值
【发布时间】:2016-09-14 07:03:45
【问题描述】:

我有一个名为“checkConvert”的方法,它应该返回一个字符串。

我创建了一个 For 循环,它在循环结束时返回一个值作为 checkConvert。此外,在该 For 循环中,我设置了一个 Case,在该 Case 中,还有另一个 For 循环,其中包含 If 语句。在这些 If 语句中,我也尝试将值作为 checkConvert 返回,但它根本不起作用。

For i = val To lastColumn_source
    For j = 1 To 3
        Dim cellValue As String
        cellValue = salesSource.Cells(j, i).Value

        Select Case i
            Case 1
                Dim match As Boolean
                match = False                'Default is false.  
                                             'Equating two cells = false.

                For x = 1 To lastRow_check
                    If cellValue = sourceCheck.Cells(x, 1) Then
                        CRMDest.Cells(j, 2) = newName
                        match = True         'Match is found.  Thus, true.
                    End If
                    If x = lastRow_check And match = False Then
                        checkConvert = newName           'Supposed to return
                                                         'value.  Doesn't
                                                         'work.
                        MsgBox checkConvert              'But MsgBox works.
                    End If
                 Next x
            Case 2                                'Several more cases follow.
            Case 13
                 checkConvert = "End of Program."        'Returns String
                                                         'to "end program."
                                                         'This one works.
        End Select

        checkConvert = "Move."                           'This return also
                                                         'works.
    Next j
Next i

【问题讨论】:

    标签: vba excel if-statement for-loop return


    【解决方案1】:
        checkConvert = newName           'Supposed to return
                                         'value.  Doesn't
                                         'work.
        MsgBox checkConvert              'But MsgBox works.
    

    您似乎认为分配函数的返回值会立即返回。这不是 VBA 的工作原理。

    您已经分配了一个返回值,但代码继续运行,因为,一个分配就是这样:一个 assignment

    如果你想在设置返回值后立即退出函数,你需要明确地这样做:

        checkConvert = newName
        Exit Function
    

    “有效”的返回值,完全靠运气。您在循环内分配返回值,并且永远不会跳出它,因此函数返回的值是在最后一次迭代中最后分配给 checkConvert 的任何值。

    【讨论】:

    • 我的上帝。该死。这很有意义。如果我执行“退出功能”,我会看看会发生什么。非常感谢,马特的马克杯。欣赏它。 :)
    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2016-11-29
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多