Excel 在VBA中设置动态公式

Excel 在VBA中设置动态公式,excel,vba,Excel,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 = "=" &

我目前正在尝试运行以下代码

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]]"
。。。如果单元格的值为文本,则将失败,运行时错误为1004。将其更改为:

ActiveCell.Formula = "'=" & Chr(34) & crag & Chr(34) & Chr(38) & "[[#Totals],[Route Name]]"
这应该足以将已注释的公式放入单元格中。返回工作表,并使用列表对象表引用将公式调整为有效公式。拥有工作公式后,请调整VBA以适应新公式

我很抱歉没有说得更准确,但您的列表对象表引用确实让我感到困惑


您可能还希望使用
Debug.Print
而不是
MsgBox
,并在即时窗口(Ctrl+G)中跟踪结果。

哪一行给出了错误?ActiveCell.Formula=“=”&crag&“[[总计],[路由名称]]”我试图让它引用一个对象,然而,我刚刚发现文本后面有一个额外的空格,导致公式没有指向对象。试试你给我的密码帮我弄明白了。非常感谢。