powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема с FindNext и пользовательской функцией
8 сообщений из 8, страница 1 из 1
Проблема с FindNext и пользовательской функцией
    #33615146
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал пользовательскую функцию. За основу взял пример из книги по использованию FindNext.
По моей идее эта функция ищет в диапазоне ячейки, в которых формула начинается с "=СУММ(" и суммирует значения этих ячеек.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Function SummaSumm(rngInput As Range) As Double
    Dim firstAddress As String
    Dim rng As Range
    
    SummaSumm =  0 
    Set rng = rngInput.Find( _
        What:="=СУММ(", LookIn:=xlFormulas, _
        LookAt:=xlPart, MatchCase:=False)
    
    If Not (rng Is Nothing) Then
        firstAddress = rng.Address
        Do
            SummaSumm = SummaSumm + rng.Value
            Set rng = rngInput.FindNext(rng)

        'Здесь почему-то не воспринимается rngInput.FindNext(rng)

        Loop While Not (rng Is Nothing) And rng.Address <> firstAddress
    End If
End Function
Отлаживаю это дело.
Первая инструкция Find работает нормально. Функции SummaSumm присваивается значение 2.
Потом доходит в первом циклом до строчки
Код: plaintext
Loop While Not...
и вылетает.
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33615153
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка. Функции SummaSumm присваивается 3.
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33615769
Есть такое мнение, что метод FindNext не работает при вызове из ячейки внутри функции. Воспользуйся альтернативным вариантом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function SummaSumm(rngInput As Range) As Double
    Dim rng As Range
    
    SummaSumm =  0 
    
    For Each rng In rngInput.Cells
        If rng.HasFormula Then
            If rng.Formula Like "*SUM*" Then
                SummaSumm = SummaSumm + rng
            End If
        End If
    Next rng
End Function
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33616112
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k-nikeНаписал пользовательскую функцию. За основу взял пример из книги по использованию FindNext.

попробуй
rngInput.Find (What:="бла-бла", Affter:=rng ,LookIn:=xlFormulas,LookAt:=xlPart, MatchCase:=False)

Не верь примерам - в том примере из справке - ошибка на строке
Loop While Not (rng Is Nothing) And rng.Address <> firstAddress
Если будет rng Is Nothing, то rng.Address вызовет ошибку (хотя в данном контексте ошибка навряд ли появиться, но возможна, если например найденные значения на что-то заменять/elfkznm и однажды Find вернет Nothing)

лучше так сделать:
if rng Is Nothing then exit do
Loop While rng.Address <> firstAddress
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33616123
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Помогло.
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33616174
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin ViktorНе верь примерам - в том примере из справке - ошибка на строке
Loop While Not (rng Is Nothing) And rng.Address <> firstAddress
Если будет rng Is Nothing, то rng.Address вызовет ошибку (хотя в данном контексте ошибка навряд ли появиться, но возможна, если например найденные значения на что-то заменять/elfkznm и однажды Find вернет Nothing)

лучше так сделать:
if rng Is Nothing then exit do
Loop While rng.Address <> firstAddress
Да, она появится только если заменять содержимое найденных ячеек, но в данном случае ничего не заменяется, но rng все равно Nothing.
Пользователь2Есть такое мнение, что метод FindNext не работает при вызове из ячейки внутри функции.
Видимо, это действительно так.
Но все равно спасибо за предупреждение, Senin Viktor. Будем иметь ввиду.
Способ Пользователя2 мне показался поуниверсальнее что ли. Им и воспользовался.
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33619060
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k-nike
Пользователь2Есть такое мнение, что метод FindNext не работает при вызове из ячейки внутри функции.
Видимо, это действительно так.
Но все равно спасибо за предупреждение, Senin Viktor. Будем иметь ввиду.
Способ Пользователя2 мне показался поуниверсальнее что ли. Им и воспользовался.

предупреждение не мое, а Пользователя2

все-таки попробовал бы
rngInput.Find (What:="бла-бла", Affter:=rng ,LookIn:=xlFormulas,LookAt:=xlPart, MatchCase:=False)
Такие рекомендации дается и самим мелкософтом
PSS ID Number: 282151.Macro that uses FindNext to search for specific format finds wrong cell in Excel 2003 or in Excel 2002
...
Рейтинг: 0 / 0
Проблема с FindNext и пользовательской функцией
    #33619488
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Viktorпредупреждение не мое, а Пользователя2
Я просто предложение с благодарностью не туда вставил. Надо было повыше чуть-чуть.:-))) Ну и Пользователя2, конечно, тоже благодарю.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема с FindNext и пользовательской функцией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]