使用VBA在循环中输入带引号的excel公式

时间:2014-11-19 17:12:49

标签: excel vba excel-vba

我正在尝试使用VBA在excel中插入一个公式,该公式在excel中如下所示:

=BDH(C2,"PX LAST",F2,"","Dir=H","days=w","DTS=H","cols=1;rows=1")

这实际上只代表了这个公式的第一行,我希望将其复制到某个列中。因此,我必须使用索引为i的循环,然后使用单元格表示法引用相应的单元格,即C2=Cells(i,3)F2=Cells(i,6)。在浏览了本网站和其他网站上的一些讨论后,我知道为了在字符串中创建文字引用,您使用双引号("")。

formulaString = "=BDH(Cells" & CStr(i) & ",3),""PX LAST"",Cells(" & CStr(i) & ",6),"""",""Dir=H"",""days=w"",""DTS=H"",""cols=1;rows=1"")"

我想在相应行的第8列插入这些公式,所以我用

执行此操作
Cells(i,8).Formula = formulaString

但是,当我这样做时,我收到错误“应用程序定义或对象定义错误”。我也看到这可以用代码

来完成
Cells(i,8).Value = Evaluate(formulaString)

这不会引发错误,但是当它运行我希望公式读取#Value的单元格时。

有人可以帮我确定一下我做错了吗?

1 个答案:

答案 0 :(得分:0)

您不应该将Cells放在公式字符串中,并且您应该使用Address属性:

formulaString = "=BDH(" & Cells(i,3).Address(False, False) & ",""PX LAST""," & Cells(i,6).Address(False, False) & ","""",""Dir=H"",""days=w"",""DTS=H"",""cols=1;rows=1"")"

但你真正想要的是switching to the R1C1 notation

formulaStringR1C1 = "=BDH(RC3,""PX LAST"",RC6,"""",""Dir=H"",""days=w"",""DTS=H"",""cols=1;rows=1"")"

然后使用

Cells(i,8).FormulaR1C1 = formulaStringR1C1