我正在使用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知识仍然在增长,而且基本不足以理解我的反对意见。
答案 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