我可以创建一个保存公式结果的变量吗?

时间:2016-02-06 01:26:52

标签: excel excel-vba vba

下面是一个示例代码,我将范围设置为等于字符串变量,然后根据公式结果保存文件名。

Dim vFormula3 As String

'Set up formula into string variable
vFormula3 = "=INDEX($A$7:$AZ$7,MATCH(" & Chr(34) & "Voyage Number" & Chr(34) & ",$A$6:$AZ$6,0))"


'Then Put formula into a cell range
'Set sheet range here if needed
Range("A3") = vFormula3

'Save code goes here
    'blah blah blah save files.

是否有可能改为重写公式,以便我将变量(例如vFormula1)设置为公式的结果?

我可以采取Dim vFormula as Formula方法吗?

1 个答案:

答案 0 :(得分:0)

正如您last question的评论中所述,请查看Application.Evaluate method。或者,更直接的方法可能是WorksheetFunction object

您的公式中缺少父工作表引用;在VBA中使用任何评估公式的方法时,这不是一个好主意,因为粗略ActiveSheet property可能会丢失父引用。

Dim vFormula3 As String, vResult As Variant

vFormula3 = "INDEX('Sheet One'!$A$7:$AZ$7, " & _
            "MATCH(""Voyage Number"", 'Sheet One'!$A$6:$AZ$6, 0))"
Debug.Print Application.Evaluate(vFormula3)
vResult = Application.Evaluate(vFormula3)
Debug.Print vResult

'HLOOKUP is a better formula for this
With Worksheets("Sheet One")
    Debug.Print Application.HLookup("Voyage Number", .Range("A6:AZ7"), 2, False)
    Debug.Print WorksheetFunction.HLookup("Voyage Number", .Range("A6:AZ7"), 2, False)
    vResult = Application.HLookup("Voyage Number", .Range("A6:AZ7"), 2, False)
    Debug.Print vResult
End With

请注意,带引号的字符串中的引号需要加倍。

我使用HLOOKUP function提供了替代公式。它似乎更适合你想要做的事情。

Debug.Print结果转到VBE的Immediate window(点击[Ctrl] + G显示)。