VBA设置单元格的公式

我正尝试使用(dynamic创build的)工作表名称和固定单元格地址来设置单元格的公式。 我正在使用下面的行,但似乎无法得到它的工作:

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

任何意见,为什么这是行不通的或在正确的方向prod将不胜感激。

提前致谢

不知道什么是不是在你的情况下工作,但下面的代码将公式放入单元格A1将检索单元格中的值G2。

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

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

尝试:

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

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

如果这不能解决问题,请提供有关具体错误或失败的更多信息。

更新

在注释中你指出你正在用下划线replace空格。 也许你正在做类似的事情:

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

但是,如果您不是将更改推送到Worksheet.Name属性,则可能会发生这些情况:

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

两者的原因是您传递了一个不存在的工作表的引用,这就是为什么你会得到#REF错误。 文件对话框是试图让你纠正该引用,通过指向一个文件,其中该表名称确实存在。 当您取消时,预计#REF错误。

所以你需要做的是:

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

那么,你的公式应该工作。

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

closures自动重新计算要帮助你:)

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

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

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

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

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

 Cells(1, 1).FormulaLocal