【问题标题】:Entering excel formula with quotations in a loop using VBA使用VBA在循环中输入带引号的excel公式
【发布时间】:2014-11-19 17:12:48
【问题描述】:

我正在尝试使用 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

有人可以帮我找出我做错了什么吗?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您不应该将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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2015-12-05
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多