这是我想要做的一个非常简单的例子。我有两个命名范围。第一个"燃料",其值为0.3,硬编码。第二个" Bill",引用工作簿中B2的值,然后将其乘以(1 +燃料)。当我参考"比尔"在单元格" C2"中,我得到650的正确输出。
使用VBA,我如何得到命名范围的输出(在这种情况下为650)" Bill"直接无需先参考"比尔"在电子表格上然后使用Range(" C2")来获取值?以下是我尝试过的几件事。
Sub named_range_value()
Dim wb As Workbook
Set wb = Workbooks("test")
MsgBox Range("bill") 'Run-time error '1004': Method 'Range' of object '_Global' failed
For Each nr In wb.Names
MsgBox nr 'Loops three times and returns:
'=#NAME
'=Sheet1!$B$2*(1+fuel)
'=0.3
Next
End Sub
答案 0 :(得分:2)
Application.Evaluate
是你的朋友。它主要是为了在您直接在Excel中输入时获得预期效果。
x = Application.Evaluate("Bill")
y = Application.Evaluate(Names("Bill").Value)
Debug.Print x, y
两者都有效。第一种形式是短而直的。第二种是更明确的,有时可能对消除歧义有用。