Как вернуть объект диапазона из пользовательской функции в vba - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть этот кусок кода в Excel:

Private Function RelCell(NmdRng as String) as Range
Set RelCell = Range(NmdRng).Cells(1,1)
End Function

выдает ошибку времени выполнения "91": переменная объекта или с переменной блока не установлена.

Я действительно незнаете, в чем проблема с моей функцией .. кто-то делает?

Ответы [ 4 ]

0 голосов
/ 14 января 2015

Пожалуйста, перепишите ваш код и протестируйте его следующим образом:

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
0 голосов
/ 11 сентября 2011

На самом деле, вы должны иметь возможность вернуть диапазон из UDF, как описано в этом MSDN-потоке .

Вот код, указанный 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 голосов
/ 13 января 2015

К вашему именованному диапазону уже прикреплена ссылка на ячейку, поэтому вам не нужно иметь .Cells(1,1) в конце.

Использование только свойства .Range(nmdRng) вернет искомый объект диапазона.

Попробуйте:

Private Function RelCell(NmdRng as String) as Range
Set RelCell = Range("NmdRng")
End Function
0 голосов
/ 10 сентября 2011

Я не знаю, в этом ли проблема, но вы только устанавливаете диапазон и ничего не возвращаете из функции.

Попробуйте объявить переменную диапазона с другим именем в качестве функции и вернуть ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...