2017-02-03 119 views
2

我正在尝试运行下面的代码。设置动态公式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’:应用程序定义或对象定义的错误:”我不明白为什么它当定义这些表中的表和列时,它们将与一个单元格但不是另一个单元格一起工作。

+2

哪条线给你错误? –

+0

ActiveCell.Formula =“=”&crag&“[[#Totals],[Route Name]]” –

回答

0

问题在于活动单元格的原始值是什么。您不能在公式中使用文本而不用引号包装它,否则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

我想让它引用一个对象,但是我刚才发现文本后面有一个额外的空格,导致公式不指向对象。尝试你给我的代码帮我弄明白了。谢谢 –