VBA设置单元格的公式

时间:2013-09-11 14:52:08

标签: excel vba cell formula

我正在尝试使用(动态创建的)工作表名称和固定单元格地址设置单元格的公式。我正在使用以下行,但似乎无法使其正常工作:

"=" & strProjectName & "!" & Cells(2, 7).Address

非常感谢任何有关为什么不起作用或正确方向的建议。

提前致谢

4 个答案:

答案 0 :(得分:16)

不确定在您的情况下哪些不起作用,但以下代码会将公式放入单元格A1中,以检索单元格G2中的值。

strProjectName = "Sheet1"
Cells(1, 1).Formula = "=" & strProjectName & "!" & Cells(2, 7).Address

在放置此公式时strProjectName引用必须存在的工作簿和工作表。 Excel将立即尝试评估公式。您可以通过关闭自动重新计算直到工作簿确实存在来阻止这种情况发生。

答案 1 :(得分:4)

尝试:

.Formula = "='" & strProjectName & "'!" & Cells(2, 7).Address

如果您的工作表名称(strProjectName)包含空格,则需要在公式字符串中包含单引号。

如果仍然无法解决此问题,请提供有关特定错误或失败的详细信息。

<强>更新

在评论中,您表明您正在用下划线替换空格。也许你正在做类似的事情:

strProjectName = Replace(strProjectName," ", "_")

但如果您还没有将此更改推送到Worksheet.Name属性,您可以预期会发生这些:

  1. 出现文件浏览对话框
  2. 公式返回#REF错误
  3. 两者的原因是您正在传递对不存在的工作表的引用,这就是您收到#REF错误的原因。文件对话框试图通过指向其中表单名称存在的文件来更正该引用。取消时,预计会出现#REF错误。

    所以你需要这样做:

    Worksheets(strProjectName).Name = Replace(strProjectName," ", "_")
    strProjectName = Replace(strProjectName," ", "_")
    

    然后,你的公式应该有效。

答案 2 :(得分:1)

如果Cells(1,1).Formula给出1004错误,就像我的情况一样,将其更改为:

Cells(1, 1).FormulaLocal

答案 3 :(得分:0)

如果您想直接创建地址,则必须存在工作表。

关闭自动重新计算需要帮助您:)

但是......你可以间接获得价值......

.FormulaR1C1 = "=INDIRECT(ADDRESS(2,7,1,0,""" & strProjectName & """),FALSE)"

在插入公式时,它将返回#REF错误,因为strProjectName表不存在。

但是在此工作表出现后,Excel将再次计算公式并显示正确的值。
缺点:没有跟踪,因此如果移动单元格或更改工作表名称,公式将不会调整为直接寻址中的更改。