按预期方式评估()不能在Excel VBA中工作

我在Excel VBA模块中有一个用户定义的函数。 我们说这是:

Function MyFunc( val1 as Double, val2 as int, val3 as int ) as Double MyFunc = val1 * val2 + val3 End Function 

我也有另一个函数MyEval:

 Function MyEval( formula as string ) MyEval = Evaluate( formula ) End Function 

在工作表中,单元格B1包含以下string:

 "blah blah blah "&MyFunc(VAL,2,0)&" foobar "&MyFunc(VAL,6,5)&" do re mi" 

请注意,引号是string的一部分,不只是表示它是一个string。 在第二个单元格中,我有以下内容:

 =MyEval(SUBSTITUTE(B1,"VAL",8)) 

一般来说这是有效的。 在上面的情况下,我会得到,如预期,string:

 blah blah blah 16 foobar 53 do re mi 

但在某些情况下,我会得到#VALUE !. 当我检查那些失败的例子时,我会发现删除不同的部分将允许string评估,但没有具体的部分导致它失败,即只是上半部分工作,只是下半部分工作,而只是中间部分作品。

考虑到这可能是一个长度问题(string长达200个字符),我写了一个新的评估函数,我把string拆分成连接符号(&)的部分,分别评估每个部分,然后将结果连接在一起:

 Function MyEval2(formula As String) If Len(formula) = 0 Then Eval2 = "" Else Dim parts() As String parts = Split(formula, "&") Dim result As String result = "" Dim index As Integer Dim part As String For index = LBound(parts) To UBound(parts) part = parts(index) If (Left(part, 1) = """") And (Right(part, 1) = """") Then part = Left(part, Len(part) - 1) part = Right(part, Len(part) - 1) result = result & part Else Dim val As Variant val = Evaluate(part) result = result & val End If Next index Eval2 = result End If 

结束function

在这种情况下,有时当variables“部分”是,例如,string

 MyFunc(8,6,5) 

线

 val = Evaluate(part) 

导致“val”是string

 MyFunc(8,6,5) 

而不是价值53。

注:我已经广泛地重写了这个,使之更清晰。