将String评估为公式

时间:2015-09-03 17:09:35

标签: excel vba excel-vba excel-formula

作为较长段代码的一部分,我已将公式制作成字符串。现在我想下一列并将该公式放入每个单元格中。我遇到了将VBA代码作为公式计算我的字符串的问题。当我尝试评估这样的公式时,我在我尝试评估的行中遇到类型不匹配错误。以下是我遇到问题的部分:

Dim commandstring As String

commandstring = [{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}]

我读到在方程式周围放置方括号将对其进行评估,但我无法正常工作。感谢任何帮助,谢谢!

3 个答案:

答案 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之前给了我以下错误:

  

自动化错误:灾难性失败

并损坏了我的文件。我不确定遗漏是否与错误相关,但至少在某些应用程序中它会最好是安全的。