Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2017, 16:58   #1
TimeStopper
Пользователь
 
Регистрация: 11.09.2012
Сообщений: 44
По умолчанию Как проверить на ошибки пользовательскую функцию?

Написал свою функцию, которая должна на первом листе находить закомментированные ячейки, и получать сумму значений этих ячеек.
Функция работать не хочет, как понять на что она ругается?

Код:
Function SummComment(Adr$) As Long
    Dim rgCells As Range   ' Ячейки с примечаниями
' Получение ячеек с примечаниями
    Application.Volatile
    On Error Resume Next
    Set rgCells = Sheets(1).Cells.SpecialCells(xlComments)
    On Error GoTo 0
' Если примечаний нет, то можно не продолжать
    If rgCells Is Nothing Then
        Exit Function
    End If
    SummComment = 0
    For Each cell In rgCells
        If cell.Comment.Text = Adr Then
            SummComment = SummComment + cell.Formula
        End If
    Next
End Function

Sub SummCommentTst()
    Dim Adr$, res$
    Dim rgCells As Range            ' Ячейки с примечаниями
    Dim SummComment!
    
    res = InputBox("Введите текст комментария который ищем")
    If VarType(res) = vbBoolean Then Exit Sub ' выходим если текст не введет
    Adr = Trim(res): If Len(Adr) = 0 Then Exit Sub ' выходим если длина тексторой строки = 0
' Получение ячеек с примечаниями
    On Error Resume Next
    Set rgCells = Sheets(1).Cells.SpecialCells(xlComments)
    On Error GoTo 0
' Если примечаний нет, то можно не продолжать
    If rgCells Is Nothing Then
        Exit Sub
    End If
    SummComment = 0
    For Each cell In rgCells
        If cell.Comment.Text = Adr Then
            SummComment = SummComment + cell.Formula
        End If
    Next
    MsgBox SummComment
End Sub
попробовал тот же код использовать в виде макроса SummCommentTst, все отрабатывает нормально. В чем проблема с реализацией через функцию?
TimeStopper вне форума Ответить с цитированием
Старый 04.05.2017, 18:38   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

имхо это
Код:
Function SummComment(Adr$) As Long
не вяжется к
Код:
SummComment = SummComment + cell.Formula
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 09.05.2017, 15:07   #3
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Метод SpecialCells не работает при использовании UDF как функции листа.
RAN. вне форума Ответить с цитированием
Старый 10.05.2017, 14:36   #4
TimeStopper
Пользователь
 
Регистрация: 11.09.2012
Сообщений: 44
По умолчанию

RAN, спасибо...а что может помочь?
или тупо перебрать все ячейки на наличие примечание, и таким образом составить массив?
TimeStopper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать пользовательскую функцию в VBA mila13 Помощь студентам 0 09.01.2015 12:58
Создать пользовательскую функцию mila13 Microsoft Office Excel 1 09.01.2015 01:10
Как "перенести" пользовательскую функцию на другие компьютеры? Snekich Microsoft Office Excel 6 21.11.2011 12:23
как связать пользовательскую функцию с с++ wert12 Общие вопросы C/C++ 0 10.02.2011 20:25
Отладить пользовательскую функцию Alexey! Microsoft Office Excel 4 15.04.2010 17:25