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