下面是一个示例代码,我将范围设置为等于字符串变量,然后根据公式结果保存文件名。
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
方法吗?
答案 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显示)。