在VBA中以字符串形式读入公式、修改公式、计算为数字



我正试图将字符串作为公式导入VBA,根据某些条件修改该公式(最终由用户定义(,然后在剩余代码中对该公式进行数值计算。

我试着写一个文本文件,然后从中读回来

我在Excel中为一个公式尝试了多种不同的格式,这些格式可以被读取,然后进行评估("X+Y",X+Y,"=X+Y",=X+Y(。当我直接从电子表格中读取公式时,它是一个字符串数组:

Mass_Balances = Worksheets("Formulas").Range("B3:C4").Value
Debug.Print Mass_Balances(1, 1)
(mu * Comp(2, 1) / (K_s + Comp(2, 1)) * Comp(1, 1)) - b * Comp(1, 1)

这很好,因为我想修改这些公式,只有当它保持字符串时才能修改。

然而,当我键入其中一个公式的文本并将其分配给另一个变量时,它是一个double(因为其中的所有变量都已定义(。这就是我最终想要的,一旦公式(一组质量平衡(完成。

Var = (mu * Comp(2, 1) / (K_s + Comp(2, 1)) * Comp(1, 1)) - b * Comp(1, 1)
Debug.Print Var
9705.5737704918

当我尝试将其中一个公式(Mass_Balance的元素(的文本分配给另一个变量(如Var(时,它要么仍然是字符串,要么如果我分配给的变量被声明为double,我会得到类型不匹配(这是意料之中的!(。转换为替身也不起作用(不是我所期望的(。

Var = Mid(Mass_balances(1, 1), 2)
Debug.Print Var
(mu * Comp(2, 1) / (K_s + Comp(2, 1)) * Comp(1, 1)) - b * Comp(1, 1)

在这里使用Mid可以去掉前导等号,我认为这对于将其作为一个公式并能够进行评估是必要的。

我意识到Var和Mass_Balance(1,1(的方程是相同的,当我之前说我想修正方程,然后得到值时。然而,我想,如果我不能找到一种方法来对原始公式进行数值评估,那么在更新后尝试这样做也是徒劳的。

我真的不明白你想做什么,但是。

如果您想将变量转换为字符串(例如您的var变量(,只需键入:

dim newvar$, var
newvar = cstr(var)

然后,如果您想从vba在excel中打印公式,只需使用.formula属性(或.FormulaR1C1(示例,

with worksheets("Formulas")
.range("A1").Formula = "=X+Y"
end with

。FormulaR1C1用于相对引用。

最新更新