2017-02-03 122 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

我想讓它引用一個對象,但是我剛纔發現文本後面有一個額外的空格,導致公式不指向對象。嘗試你給我的代碼幫我弄明白了。謝謝 –