设置动态公式VBA
问题描述:
我正在尝试运行下面的代码。设置动态公式VBA
Sub TabRef()
crag = ActiveCell.Value
crag = Replace(Replace(Replace(crag, " ", "_"), "-", "_"), ",", "_")
Selection.Offset(0, 2).Select
MsgBox (crag)
MsgBox ("=" & crag & "[[#Totals],[Route Name]]")
ActiveCell.Formula = "=" & crag & "[[#Totals],[Route Name]]"
Selection.Offset(0, 2).Select
ActiveCell.FormulaR1C1 = "=" & crag & "[[#Totals],[Stars]]/" & crag & "[[#Totals],[Route Name]]"
Selection.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=" & crag & "[[#Totals],[Rating 3]]/" & crag & "[[#Totals],[Route Name]]"
End Sub
我将再次运行这个,它会完全正常工作,但我会再次运行它,并获得“运行时错误‘1004’:应用程序定义或对象定义的错误:”我不明白为什么它当定义这些表中的表和列时,它们将与一个单元格但不是另一个单元格一起工作。
答
问题在于活动单元格的原始值是什么。您不能在公式中使用文本而不用引号包装它,否则Excel会尝试将其确定为“命名范围”或“列表对象”。此行,
ActiveCell.Formula = "=" & crag & "[[#Totals],[Route Name]]"
...如果单元格的值为文本,将会失败,并返回Run time error: 1004
。将其更改为:
ActiveCell.Formula = "'=" & Chr(34) & crag & Chr(34) & Chr(38) & "[[#Totals],[Route Name]]"
这应该足以将注释的公式放入单元格中。回到工作表并使用列表对象表引用将公式调整为工作表。当你有一个工作公式时,调整VBA以适应新的公式。
我很抱歉没有更精确,但您的列表对象表引用已经承认难倒了我。
您也可以使用Debug.Print
而不是MsgBox
,并按照立即窗口(Ctrl + G)中的结果进行操作。
+0
我想让它引用一个对象,但是我刚才发现文本后面有一个额外的空格,导致公式不指向对象。尝试你给我的代码帮我弄明白了。谢谢 –
哪条线给你错误? –
ActiveCell.Formula =“=”&crag&“[[#Totals],[Route Name]]” –