2017-01-19 4 views
0

これは私がしようとしているものの非常に単純な例です。私は2つの名前付き範囲を持っています。最初の "燃料"は、0.3でハードコードされた値を持っています。 2番目の「Bill」は、ブックのB2の値を参照し、それに(1 +燃料)を掛けます。私は、セル「C2」の「ビル」を参照すると、私は650名前付き範囲の値へのアクセス

VBAを使用して

enter image description here

の正しい出力を取得し、どのように私は(この場合は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

MsgBoxは、文字列入力が範囲入力ではないことを要求しています。それがエラーの原因です。値またはそれを含む文字列を渡す必要があります。 –

答えて

0

Application.Evaluateはあなたの友人です。これは主に、Excelで直接入力するときに期待するものを得るために設計されています。

x = Application.Evaluate("Bill") 
y = Application.Evaluate(Names("Bill").Value) 
Debug.Print x, y 

両方とも動作します。最初の形は短くてまっすぐです。 2番目はより明示的であり、曖昧さ回避のために時折役立つことがあります。

関連する問題