2015-10-14 5 views
0

Я работаю со сложной функцией UserDefined, которая работает только с одним и непрерывным диапазоном данных. Поэтому я хотел бы создать функцию, которая для данного диапазона возвращает мне новый диапазон, опустошенный пустыми ячейками, который будет служить в качестве входных данных для начальной функции.Excel VBA Новый диапазон от выбора

Вот что то, что я безуспешно сделал до сих пор:

Public Function NewRange(rng) As Range 

    rng.SpecialCells(xlCellTypeConstants).Select 
    rng.SpecialCells(xlCellTypeFormulas).Select 
    rng = Union(rng.SpecialCells(xlCellTypeConstants), _ 
     rng.SpecialCells(xlCellTypeFormulas)).Select 
Set NewRange = rng 
End Function 

Не могли бы вы помочь мне, пожалуйста, в ее решении?

+0

'rng' является объектом. Он должен использовать ключевое слово 'Set'. Итак: 'Set rng = ...'. Также удалите '.select' в конце того же оператора. –

+0

Вы не можете этого сделать. Невозможно создать диапазон, который не находится на листе. Вам нужно будет изменить UDF либо для работы с неудовлетворительными диапазонами, либо для игнорирования ярлыков ячеек или для фактического копирования данных. – Rory

ответ

0
Public Function NewRange(ByRef rng As Range) As Range 
    Dim nrC As Range, nrF As Range 

    If Len(rng.Value2) = 0 Then Set rng = rng.Parent.UsedRange.Cells(1, 1) 
    Set rng = rng.CurrentRegion 

    On Error Resume Next 
    Set nrC = rng.SpecialCells(xlCellTypeConstants) 
    Set nrF = rng.SpecialCells(xlCellTypeFormulas) 

    Select Case True 
     Case Not nrC Is Nothing And Not nrF Is Nothing: Set NewRange = Union(nrC, nrF) 
     Case Not nrC Is Nothing:      Set NewRange = nrC 
     Case Not nrF Is Nothing:      Set NewRange = nrF 
    End Select 
    If NewRange Is Nothing Then Set NewRange = rng.Parent.Cells(1) 
End Function 
Смежные вопросы