设置dynamic公式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)中的结果。