VBA Selection.Formula返回“False”而不是“N / A”

时间:2013-10-15 17:03:24

标签: excel-vba excel-formula vba excel

我正在使用VBA针对存储在工作簿中另一个工作表中的五个“规则”列运行一组数据。简而言之,我似乎有代码可行,但当一个单元格公式返回#N / A或#VALUE时,VBA使用Selection.Formula =返回“False”。我得到错误值至关重要,因为它告诉用户不同于“False”的东西。 False应该表示C列(参见下面的计算选项卡图片)未通过该规则。错误值表示在“规则”列中找不到VLookup的列B,或者规则写错了。

这是我到目前为止所拥有的:

    Sub Build_Formulas_v2()

    Application.Calculation = xlManual
    Range("a2", Range("a65536").End(xlUp)).Offset(0, 6).Select
    Selection.Value = _
    Evaluate("(""=""&SUBSTITUTE(VLOOKUP(B2,'Logic Statements'!A:E,4,FALSE),""ZZZ"",""c""&ROW()))")

    End Sub

任何帮助都会受到极大的赞赏 - 我的VBA知识仍然在增长,而且基本不足以理解我的反对意见。

1 个答案:

答案 0 :(得分:0)

我相信您使用的是Excel 2003.您绝不应该对A65536之类的值进行硬编码。您可以在xl2007 +中获得不良结果,因为它们有1048576行。

这是你在尝试的吗?

Sub Build_Formulas_v2()
    Dim lRow As Long
    Dim ws As Worksheet

    Application.Calculation = xlManual

    '~~> Change this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        .Range("A2:A" & lRow).Offset(0, 6).Formula = _
        "=SUBSTITUTE(VLOOKUP(B2,'Logic Statements'!A:E,4,FALSE),""ZZZ"",""c""&ROW())"

        '~~> Uncomment the below in case you want to replace formulas with values
        '.Range("A2:A" & lRow).Offset(0, 6).Value = .Range("A2:A" & lRow).Offset(0, 6).Value
    End With
End Sub

或者如果您不想使用.Offset,那么您可以直接解决Column G

Sub Build_Formulas_v2()
    Dim lRow As Long
    Dim ws As Worksheet

    Application.Calculation = xlManual

    '~~> Change this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        .Range("G2:G" & lRow).Formula = _
        "=SUBSTITUTE(VLOOKUP(B2,'Logic Statements'!A:E,4,FALSE),""ZZZ"",""C""&ROW())"

        '~~> Uncomment the below in case you want to replace formulas with values
        '.Range("A2:A" & lRow).Offset(0, 6).Value = _
        .Range("A2:A" & lRow).Offset(0, 6).Value
    End With
End Sub