Excel VBA选择。公式返回“;假;而不是",;不适用;

Excel VBA选择。公式返回“;假;而不是",;不适用;,excel,excel-formula,vba,Excel,Excel Formula,Vba,我正在使用VBA对工作簿中另一个工作表中存储的五个“规则”列运行一组数据。简单地说,我似乎有代码可以工作,但是VBA使用Selection.Formula=在单元格公式返回#N/A或#VALUE时返回“False”。获取错误值非常重要,因为它告诉用户与“False”不同的信息。False表示C列(见下面计算选项卡的图片)不通过规则。错误值表示在规则列中找不到包含VLookup的B列,或者规则编写不正确 以下是我目前掌握的情况: Sub Build_Formulas_v2() A

我正在使用VBA对工作簿中另一个工作表中存储的五个“规则”列运行一组数据。简单地说,我似乎有代码可以工作,但是VBA使用Selection.Formula=在单元格公式返回#N/A或#VALUE时返回“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知识仍在增长,而且太基础,无法理解我面临的挑战。

我相信您正在使用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
,则可以直接寻址
列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

使用
Selection.Text
而不是
.Value
@DavidZemens:
.Text
是只读属性:)@SiddharthRout+1我以为他在检查/比较错误值,而不是试图编写它。谢谢!谢谢你的回答,这很有帮助。不幸的是,它仍然没有达到我想要的结果。它正确地给了我不适用的结果,但它没有评估公式。我希望它对上述公式进行评估,但如果合适,还将返回#N/A。如果我使用“=”和SUBSTITUTE(VLOOKUP(B2,'Logic Statements'!A:E,4,FALSE),“ZZZ”,“C”和ROW()),我仍然会得到与开始时相同的结果-没有N/A值。有什么调整吗?让我进一步澄清一下:VLOOKUP实际上是在拉一个公式,然后我想计算它,比如:AND(LEN(C2)=10,或者(左(C2,2)=“57”,左(C2,2)=“13”))。这是我需要计算的公式,VLOOKUP从另一张纸上取下。是的,如果我把=放在前面。在转换到VBA代码之前,我将这些公式作为单元公式进行了测试。当你给我的代码(非常有效)将公式写入单元格时,前面没有“=”,所以它只是一个文本字符串,不是公式。这有意义吗?
没有“=”
嗯,这很奇怪,因为我的代码,把
=
放进去了是的!它放入“=”,因此Excel计算替代函数。但我希望它也能计算出,在代换后得到的公式。希望这有意义?