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
属性,则可能会发生这些情况:
- 出现文件浏览对话框
- 该公式返回
#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