2011-09-10 3 views
-1

私はExcelでのコードのこの部分を持っている中で、ユーザー定義関数の範囲オブジェクトを返します。はどのようにVBA

私は本当に私の機能に問題があるかわからない...誰かがいますか?

+3

をイミディエイトウィンドウでは、 'レンジ(NmdRng).activate'を使用してみてください、とケースの範囲内実際に動作している場合は、Excelで選択されます。私はVBAがこの範囲(間違った名前、おそらく)に達していないので、問題があると思います。 –

答えて

0

をこれが問題である場合、私は知りませんが、あなただけで範囲を設定しているとから何かを返されていません機能。

関数とは異なる名前の範囲変数を宣言して返してください。

+0

VBA関数の戻り値を指定する方法は、 '名前を変数とする変数'を設定することです。 – Eddy

+0

私が知っていることは、私は実際には戻り値の行に使われている実際のSetキーワードを見たことがないということです。私はそれがオプションだと思いますか? – aevanko

+0

これは必須です。そうしないと、(範囲)オブジェクトへの参照を返すので、エラーがスローされます。 (http://stackoverflow.com/questions/349613/what-does-the-keyword-set-actually-do-in-vbaを参照) – Eddy

0

実際には、このMSDN Threadで説明されているように、UDFから範囲を返すことができます。

Function GetMeRange(rStartCell As Range, lRows As Long, iColumns As Integer) As Range 
    Set GetMe = rStartCell.Resize(lRows, iColumns) ' note the use of Set here since we are setting an object variable 
End Function 

名前付き範囲にアクセスしたいと

ティアゴさんのコメントは、非常に正しいことを指摘し、それがあるべき(と、それは動作します):ここでは

はMVPによって与えられたコードがあります最初に定義されます。
UDFにブレークポイントを設定して、Range(NmdRng)が定義されているかどうかを確認できます。

0

名前付き範囲には既にセル参照が添付されているため、末尾に.Cells(1,1)を配置する必要はありません。

.Range(nmdRng)プロパティを単独で使用すると、探している範囲オブジェクトが返されます。

試してみてください。

Private Function RelCell(NmdRng as String) as Range 
Set RelCell = Range("NmdRng") 
End Function 
0

あなたのコードを書き換えると次のようにそれをテストしてください:

Private Function RelCell(NmdRng as String) as Range 
Dim TestRange As Range 

Set TestRange=Range(NmdRng) 
TestRange.Activate 'I think that error will occur here because, NmdRng is somehow invalid 
Set RelCell = TestRange.Cells(1,1) 
End Function 
関連する問題