2011-09-10 49 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

實際上,您應該能夠返回一個從UDF返回的範圍,如MSDN Thread中所述。

這是由MVP給予代碼:

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 

(和它的作品)

蒂亞戈的評論指出了一條非常正確的事情,只要你想訪問一個指定的範圍,應該是首先定義。
您可以嘗試在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 
相關問題