2015-11-13 59 views
0

我正在尋找一種更簡單的方法,將Excel中的單元格設置爲公式,然後是值。下面是我寫的一個宏的子集。將範圍設置爲公式,然後設置爲值

Range("InsuredName").Value = "=INDEX(Data,RetrievalRow,InsuredNameIndex)" 
Range("InsuredName").Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 

我可以做到這一點,而無需複製,粘貼特殊值?我在模型中有一個輸入表,用戶輸入必要的輸入,模型根據這些輸入執行某些計算。我已經構建了可以在稍後保存和檢索其輸入的功能。因此,根據要求檢索指定的一組輸入,該宏將公式放入輸入選項卡上的相應單元格中,以在存儲輸入的數據選項卡中執行查找。然後,它將該單元格粘貼到值。對於一些輸入重複執行此操作。我認爲有一個更簡單的方法,但我一直無法弄清楚。

回答

2

使用Evaluate()方法

Range("InsuredName").Value = Evaluate("INDEX(Data,RetrievalRow,InsuredNameIndex)") 

如果沒有使用VBA的變量,您也可以使用簡寫這是方括號:

Range("InsuredName").Value = [INDEX(Data,RetrievalRow,InsuredNameIndex)] 

您還可以評估一個命名範圍以返回範圍ob JECT - 所以同樣,你可以用速記表達式:

[InsuredName] = [INDEX(Data,RetrievalRow,InsuredNameIndex)] 
+0

我喜歡最後一個選項。人們應該在VBA中更多地使用Evaluate(和括號表達式)。它確實使您的代碼更加簡潔和可讀。 – Tmdean

+0

@ExcelHero很好的地方,但我已經把它們全部刪除了! –

+0

謝謝!我欣賞指導!我使用了evaluate()方法,一切正常! – DPM

2

替換所有與此:

With Range("InsuredName") 
    .Value = "=INDEX(Data,RetrievalRow,InsuredNameIndex)" 
    .Value = .Value 
End With 
+0

謝謝您的回覆! – DPM

+0

不客氣。 –