我试图使用一个(动态创建的)工作表名称和固定单元格地址为单元格设置公式。我使用了以下代码行,但似乎无法使其工作:
"=" & strProjectName & "!" & Cells(2, 7).Address
任何关于为什么这不起作用的建议或引导都将不胜感激。我试图使用一个(动态创建的)工作表名称和固定单元格地址为单元格设置公式。我使用了以下代码行,但似乎无法使其工作:
"=" & strProjectName & "!" & Cells(2, 7).Address
任何关于为什么这不起作用的建议或引导都将不胜感激。我不确定你的情况下哪里出了问题,但是以下代码将在单元格A1中放入一个公式,该公式将检索单元格G2中的值。
strProjectName = "Sheet1"
Cells(1, 1).Formula = "=" & strProjectName & "!" & Cells(2, 7).Address
strProjectName
所引用的工作簿和工作表必须在公式放置时存在。Excel将立即尝试计算该公式。您可能可以通过关闭自动重算直到工作簿存在来阻止这种情况发生。
尝试:
.Formula = "='" & strProjectName & "'!" & Cells(2, 7).Address
如果您的工作表名称(strProjectName
)中有空格,则需要在公式字符串中包含单引号。
如果这样做没有解决问题,请提供更多关于具体错误或失败的信息。
更新
在评论中,您表示正在用下划线替换空格。也许您正在执行类似以下操作:
strProjectName = Replace(strProjectName," ", "_")
但是如果您没有将更改推送到 Worksheet.Name
属性,那么您可以期望发生以下情况:
#REF
错误这两种情况的原因是您正在传递一个不存在的工作表的引用,这就是为什么会出现 #REF 错误的原因。文件对话框是希望让您更正该引用,指向一个包含该工作表名称的文件。当您取消时,预计会出现 #REF 错误。
因此,您需要执行以下操作:
Worksheets(strProjectName).Name = Replace(strProjectName," ", "_")
strProjectName = Replace(strProjectName," ", "_")
Cells(1, 1).FormulaLocal
如果您想直接进行地址操作,则必须存在工作表。
关闭自动重新计算会有所帮助 :)
但是...您仍然可以间接获取值...
.FormulaR1C1 = "=INDIRECT(ADDRESS(2,7,1,0,""" & strProjectName & """),FALSE)"