使用VBA在循环中input带有引号的Excel公式
我正尝试使用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)
引用适当的单元格。 在浏览本网站和其他人的讨论之后,我知道为了在string中创build一个字面引号,可以使用双引号( ""
)。
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
。
有人能帮我确定我在做什么错吗?
您不应该将公式string中的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"")"
然而你真正想要的是切换到R1C1表示法 :
formulaStringR1C1 = "=BDH(RC3,""PX LAST"",RC6,"""",""Dir=H"",""days=w"",""DTS=H"",""cols=1;rows=1"")"
然后使用
Cells(i,8).FormulaR1C1 = formulaStringR1C1