将范围设置为公式,然后设置为值

问题描述:

我正在寻找一种更简单的方法,将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 

我可以做到这一点,而无需复制,粘贴特殊值?我在模型中有一个输入表,用户输入必要的输入,模型根据这些输入执行某些计算。我已经构建了可以在稍后保存和检索其输入的功能。因此,根据要求检索指定的一组输入,该宏将公式放入输入选项卡上的相应单元格中,以在存储输入的数据选项卡中执行查找。然后,它将该单元格粘贴到值。对于一些输入重复执行此操作。我认为有一个更简单的方法,但我一直无法弄清楚。

使用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

替换所有与此:

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

谢谢您的回复! – DPM

+0

不客气。 –