1

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

4

1 回答 1

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
于 2013-10-15T17:28:03.480 回答