9

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

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

任何关于为什么这不起作用的建议或正确方向的刺激都将不胜感激。

4

4 回答 4

19

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

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

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

于 2013-09-11T15:01:43.537 回答
4

尝试:

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

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

如果这不能解决问题,请提供有关特定错误或故障的更多信息。

更新

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

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

但是,如果您不同时将更改推送到Worksheet.Name属性,则可以预期会发生以下情况:

  1. 出现文件浏览对话框
  2. 公式返回#REF错误

两者的原因是您传递了对不存在的工作表的引用,这就是您收到 #REF 错误的原因。文件对话框试图让您通过指向确实存在该工作表名称的文件来更正该引用。当您取消时,预计会出现 #REF 错误。

所以你需要这样做:

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

然后,您的公式应该可以工作。

于 2013-09-11T14:58:18.467 回答
1

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

Cells(1, 1).FormulaLocal
于 2017-11-22T18:01:42.957 回答
0

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

关闭自动重新计算希望对您有所帮助:)

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

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

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

但在此工作表出现后,Excel 将再次计算公式并显示适当的值。
缺点:不会有跟踪,因此如果移动单元格或更改工作表名称,公式将不会像直接寻址那样适应更改。

于 2013-09-11T16:09:13.853 回答