Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将范围设置为公式,然后设置为值_Vba_Excel - Fatal编程技术网

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

Vba 将范围设置为公式,然后设置为值,vba,excel,Vba,Excel,我正在寻找一种更简单的方法,将Excel中的单元格设置为公式,然后设置为值。下面是我编写的宏的子集 Range("InsuredName").Value = "=INDEX(Data,RetrievalRow,InsuredNameIndex)" Range("InsuredName").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks

我正在寻找一种更简单的方法,将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
我是否可以在不复制、粘贴特殊值的情况下完成此操作?我在模型中有一个输入表,用户输入必要的输入,模型根据这些输入执行某些计算。我有内置的功能,他们可以保存和检索他们的输入在以后的时间。因此,当需要检索指定的输入集时,此宏会将公式放入“输入”选项卡上的相应单元格中,以在存储输入的“数据”选项卡中执行查找。然后,它将这些单元格粘贴到值。对许多输入重复执行此操作。我想有一个更简单的方法,但我还没能找到。

用以下内容替换所有内容:

With Range("InsuredName")
    .Value = "=INDEX(Data,RetrievalRow,InsuredNameIndex)"
    .Value = .Value
End With
将所有内容替换为以下内容:

With Range("InsuredName")
    .Value = "=INDEX(Data,RetrievalRow,InsuredNameIndex)"
    .Value = .Value
End With
使用
Evaluate()
方法

Range("InsuredName").Value = Evaluate("INDEX(Data,RetrievalRow,InsuredNameIndex)")
如果没有要使用的VBA变量,也可以使用方括号来表示:

Range("InsuredName").Value = [INDEX(Data,RetrievalRow,InsuredNameIndex)]
您还可以计算命名范围以返回范围对象-因此,您也可以使用速记表达式:

[InsuredName] = [INDEX(Data,RetrievalRow,InsuredNameIndex)]
使用
Evaluate()
方法

Range("InsuredName").Value = Evaluate("INDEX(Data,RetrievalRow,InsuredNameIndex)")
如果没有要使用的VBA变量,也可以使用方括号来表示:

Range("InsuredName").Value = [INDEX(Data,RetrievalRow,InsuredNameIndex)]
您还可以计算命名范围以返回范围对象-因此,您也可以使用速记表达式:

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

我喜欢最后一个选择。人们真的应该在VBA中更多地使用Evaluate(和括号内的表达式)。它真的让你的代码更简洁易读。谢谢!感谢您的指导!我使用了evaluate()方法,一切正常!我喜欢最后一个选择。人们真的应该在VBA中更多地使用Evaluate(和括号内的表达式)。它真的让你的代码更简洁易读。谢谢!感谢您的指导!我使用了evaluate()方法,一切正常!谢谢你的回复!谢谢你的回复!