Страницы: 1
RSS
VBA: как обратиться к результату функции через Set
 
Добрый день!  
 
Необходимо в процедуру вытащить результат функции (Function) и зафиксировать используя оператор Set или как-нибудь иначе?  
Например, в данном случае test1 вытащит результат, а test2 даст ошибку. Общий смысл в том чтобы избежать многократного обращения к функции внутри процедуры. Помогите плиз.  
 
Function CountCellsInSelection() As Integer  
Dim sr As Range  
Dim ncells As Integer  
If TypeName(Selection) <> "Range" Then  
ncells = 0  
Else  
Set sr = Range(Selection, Selection)  
ncells = sr.Cells.Count  
End If  
CountCellsInSelection = ncells  
End Function  
 
Sub test1 ()  
MsgBox CountCellsInSelection  
End Sub  
 
Sub test2 ()  
Set X = CountCellsInSelection  
MsgBox X  
End Sub
 
Если n=0 то n=CountCellsInSelection иначе используем n
 
Вернее так:  
 
Если n=0 то n=CountCellsInSelection  
Используем n
 
Все проще:  
Function CountCellsInSelection(sr As Range) As Integer  
   CountCellsInSelection = sr.Cells.Count  
End Function  
 
Sub test1()  
   MsgBox CountCellsInSelection([a1:c100])
End Sub
Я сам - дурнее всякого примера! ...
 
И лучше использовать лонг. Для выделения:  
Function CountCellsInSelection(sr As Range) As Long  
   CountCellsInSelection = sr.Cells.Count  
End Function  
 
Sub test1()  
   MsgBox CountCellsInSelection(Selection)  
End Sub
Я сам - дурнее всякого примера! ...
 
Я наверно недостаточно хорошо описал задачу. В реальности, функция представляет из себя довольно большой кусок кода, и процедура, которая ее вызывает, тоже довольно большая и вызывает функцию несколько раз. Смысл задачи в том, чтобы вытащить результат функции ОДИН раз в начале процедуры и далее использовать его внутри процедуры сколько угодно раз.
 
И кто мешает?  
dim a&  
a=CountCellsInSelection  
в а останется вычисленное значение.
Я сам - дурнее всякого примера! ...
 
Вы, наверное, недостаточно хорошо ответы прочитали.  
{quote}{login=Hugo}{date=23.11.2012 03:54}{thema=}{post}Если n=0 то n=CountCellsInSelection  
Используем n{/post}{/quote}
 
Работает и то и другое. Простите чайника. Про такую форму декларации "dim a&" вообще не знал.
 
Karabas090909,  
это просто сокращённая форма записи для ленивых:  
As Currency == @  
As Double == #  
As Integer == %  
As Long == &  
As Single == !  
As String == $
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Наверх