VBA设置单元格的公式

Posted

技术标签:

【中文标题】VBA设置单元格的公式【英文标题】:VBA setting the formula for a cell 【发布时间】:2013-09-15 16:12:27 【问题描述】:

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

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

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

【问题讨论】:

我没有尝试您的公式,但作为替代方案,您始终可以在工作表模块中创建更改事件并以编程方式进行计算。 strProjectName 的示例值是什么?您是否尝试引用不存在的工作表或工作簿? 此时它不存在,但几行后该工作表被创建。当宏完成运行时,不会认为这会是一个问题;工作表到位 @Ryuu,那是你的问题。当您放置该公式时,Excel 会立即尝试引用它。当它找不到工作簿时,它会打开文件浏览器,以便您选择一个有效的工作簿。 @Stewbob,我希望这不是问题。我现在试试,然后回复你。 【参考方案1】:

试试:

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

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

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

更新

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

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

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

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

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

所以你需要这样做:

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

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

【讨论】:

我通过用下划线替换空格来处理空格问题。本身没有错误,它只是无法解析公式(显示#REF!)如果有任何帮助,每当我运行宏时;在代码中传递该点后,它会打开一个文件浏览对话框 如果您没有同时将 REPLACE 函数推送到 Worksheet.Name 属性,这正是我所期望的。请参阅上面的修订版。 @Stewbob 的上述 cmets 指出了错误的根本原因。在创建工作表之后放置公式。那么你应该准备好了。 感谢您的帮助。这只是订购。菜鸟的错误,但我只用宏做了 2 天。有点期望这是答案,但希望不是……【参考方案2】:

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

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

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

【讨论】:

这就是我一直在做的,但它不能解决公式 - 只是显示#REF!如果有任何帮助,每当我运行宏时;在代码中传递该点后,它会打开一个文件浏览对话框 @Ryuu,如果它要求提供文件名,则 strProjectName 未指向有效的工作表名称。公式的完整参考是 [FileName]Sheetname!Address。您可以省略当前文件的 [Filename],也可以省略当前工作表的 [Filename]Sheetname,但这些是单元格引用中唯一允许的组合 @Ryuu 如果您的项目名称中有空格,则必须在项目名称前后添加单引号。【参考方案3】:

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

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

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

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

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

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

【讨论】:

【参考方案4】:

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

Cells(1, 1).FormulaLocal

【讨论】:

以上是关于VBA设置单元格的公式的主要内容,如果未能解决你的问题,请参考以下文章

通过在一个单元格中输入公式来填充不同单元格的数组公式

使用电子表格中的单元格的公式

事件取决于带有公式的单元格

使用动态单元格引用通过 VBA 应用公式。

excel2007 VBA中如何引用指定的单元格地址?

根据另一个单元格的值自动填充单元格,不带公式