作为较长段代码的一部分,我已将公式制作成字符串。现在我想下一列并将该公式放入每个单元格中。我遇到了将VBA代码作为公式计算我的字符串的问题。当我尝试评估这样的公式时,我在我尝试评估的行中遇到类型不匹配错误。以下是我遇到问题的部分:
Dim commandstring As String
commandstring = [{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}]
我读到在方程式周围放置方括号将对其进行评估,但我无法正常工作。感谢任何帮助,谢谢!
答案 0 :(得分:1)
循环并将公式放入单元格公式中。字符串是固定的。
commandstring = "{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}"
Dim lRow As Long
Dim ws As Excel.Worksheet
Set ws = ActiveWorkbook.Sheets("Sheet1")
lRow = 1
'Loop through and put the formula in each cell
Do While lRow <= ws.UsedRange.Rows.count
ws.Range("B" & lRow).Formula = "{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}"
lRow = lRow + 1
Loop
或者如果你真的想在字符串变量中使用它。
ws.Range("B" & lRow).Formula = commandstring
答案 1 :(得分:1)
尝试这个小函数,它将一个字符串作为公式:
Function Eval(Ref As String)
Application.Volatile
Eval = Evaluate(Ref)
End Function
调用此功能:
Dim commandstring As String
commandstring = "{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}"
commandstring = Eval(commandstring)
答案 2 :(得分:0)
我想背负ManishChristian的回答,并建议使用
Function Eval(Ref As String)
Application.Volatile
Eval = Application.Evaluate(Ref)
End Function
省略&#34;申请。&#34;在Evaluate之前给了我以下错误:
自动化错误:灾难性失败
并损坏了我的文件。我不确定遗漏是否与错误相关,但至少在某些应用程序中它会最好是安全的。