powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Один код, один набор данных - результат разный
7 сообщений из 7, страница 1 из 1
Один код, один набор данных - результат разный
    #34739112
KuskovS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые формумчане, не пойму в чем проблема. У меня есть карточка счета 91,2 выгруженная из 1С. В ячейках операции я ищу, значения "Услуги банка" после этого я смещаюсь на две ячейки от активной и закрашиваю сумму в синий цвет, после этого я смещаюсь еще на 5 ячеек и ставлю " строка 030". Это нужно для того чтобы понять, какая сумму учавствует уже в расчетах и к какой строке затрат относится. Так вот сама проблема:
вот здесь все идет нормально
Код: plaintext
1.
2.
3.
4.
5.
6.
For Each ActiveCell In Диапазон912
        If ActiveCell = Диапазон912.Find(what:="Услуги банка") Then 
            ActiveCell.Offset( 0 ,  7 ).Value = "строка 030"
            ActiveCell.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        End If
    Next ActiveCell
а вот здесь находит первое совподение делает все необходимое и все, остальные не видит
А КОД ВЕДЬ ОДИНАКОВ ЗА ИСКЛЮЧЕНИЕМ СТРОКИ ПОИСКА
Код: plaintext
1.
2.
3.
4.
5.
6.
For Each ActiveCell In Диапазон912
        If ActiveCell = Диапазон912.Find(what:="Заработная плата") Then
            ActiveCell.Offset( 0 ,  7 ).Value = "строка 030"
            ActiveCell.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        End If
    Next ActiveCell
В чем может быть проблема????

Это полностью код, и приложен пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub Расходы()
Sheets("КарСч91.2").Activate
    Range("A6").Offset( 0 ,  5 ).Value = "Строка ОПУ"
        Range("C9").Select
        Range(Selection, Selection.End(xlDown)).Select
        Set Диапазон912 = Selection
        
    For Each ActiveCell In Диапазон912
        If ActiveCell = Диапазон912.Find(what:="Услуги банка") Then 
            ActiveCell.Offset( 0 ,  7 ).Value = "строка 030"
            ActiveCell.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        End If
    Next ActiveCell

    For Each ActiveCell In Диапазон912
        If ActiveCell = Диапазон912.Find(what:="Заработная плата") Then
            ActiveCell.Offset( 0 ,  7 ).Value = "строка 030"
            ActiveCell.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        End If
    Next ActiveCell
End Sub
Модератор:
тэг SRC облегчает понимание вашего кода
...
Рейтинг: 0 / 0
Один код, один набор данных - результат разный
    #34739895
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KuskovSвот здесь все идет нормальноЭто случайность.
Нельзя делать for each ActiveCell in SomeRange . ActiveCell это предопределенный диапазон обозначающий активную ячейку на листе. Перепеши свой код с собственной переменной типа Range и все заработает.
...
Рейтинг: 0 / 0
Один код, один набор данных - результат разный
    #34739902
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так. Вообще, твой подход меня удивил, цикл по ячейкам и кроме этого поиск в цикле... А использование в качестве переменной ActiveCell шокировал: это же объект листа соответсвующий активной ячейке. Почему Excel не стал как минимум ругаться???...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub Расходы2()
Dim Cell As Range

    Sheets("КарСч91.2").Activate
    Range("A6").Offset( 0 ,  5 ).Value = "Строка ОПУ"
    Range("C9").Select
    Range(Selection, Selection.End(xlDown)).Select
    Set Диапазон912 = Selection
        
    For Each Cell In Диапазон912
        If Cell Like "*Услуги банка*" Then
            Cell.Offset( 0 ,  7 ).Value = "строка 030"
            Cell.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        End If
    Next Cell

    For Each Cell In Диапазон912
        If Cell Like "*Заработная плата*" Then
            Cell.Offset( 0 ,  7 ).Value = "строка 030"
            Cell.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        End If
    Next Cell
    
End Sub
...
Рейтинг: 0 / 0
Один код, один набор данных - результат разный
    #34739924
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и вообще, весь этот макрос - страшная жуть.

На:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub Расходы()
    Sheets("КарСч91.2").Activate
    Range("A6").Offset( 0 ,  5 ).Value = "Строка ОПУ"
    Set Диапазон912 = Range(Range("C9"), Range("C9").End(xlDown))
    
    set r = Диапазон912.Find(what:="Услуги банка", after:=Range("C9"))
    while not r is nothing
        r.Offset( 0 ,  7 ).Value = "строка 030"
        r.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        set r=Диапазон912.FindNext(r)
    wend

    set r = Диапазон912.Find(what:="Заработная плата", after:=Range("C9"))
    while not r is nothing
        r.Offset( 0 ,  7 ).Value = "строка 030"
        r.Offset( 0 ,  2 ).Font.ColorIndex =  5 
        set r=Диапазон912.FindNext(r)
    wend
End Sub
...
Рейтинг: 0 / 0
Один код, один набор данных - результат разный
    #34739952
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbaproА использование в качестве переменной ActiveCell шокировал: это же объект листа соответсвующий активной ячейке. Почему Excel не стал как минимум ругаться???...А потому что деятели из микрософта не предполагали что кому-то взбредет в голову создать переменную совпадающую по имени с системным объектом.
Вот этот код даст ошибку:
Код: plaintext
1.
2.
3.
4.
Sub a()
    For Each ActiveCell In Range("A1:A4")
        ActiveCell.Offset( 0 ,  2 ).Value = ActiveCell.Value
    Next
End Sub
А вот этот не даст:
Код: plaintext
1.
2.
3.
4.
5.
Sub a()
    Dim ActiveCell As Range
    For Each ActiveCell In Range("A1:A4")
        ActiveCell.Offset( 0 ,  2 ).Value = ActiveCell.Value
    Next
End Sub
...
Рейтинг: 0 / 0
Один код, один набор данных - результат разный
    #34742582
KuskovS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все работает!!!!Спасибо

vbaproПопробуй так. Вообще, твой подход меня удивил, цикл по ячейкам и кроме этого поиск в цикле... А использование в качестве переменной ActiveCell шокировал: это же объект листа соответсвующий активной ячейке. Почему Excel не стал как минимум ругаться???...

Не ругается, вообще ни как, еще и работает. Я только-только начинаю программировать на VBA - кто не допускает ошибок???
Спасибо за критику, ответы и коды. Критика контструктивная. Буду работать.
...
Рейтинг: 0 / 0
Один код, один набор данных - результат разный
    #34742732
KuskovS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl vbaproА использование в качестве переменной ActiveCell шокировал: это же объект листа соответсвующий активной ячейке. Почему Excel не стал как минимум ругаться???...А потому что деятели из микрософта не предполагали что кому-то взбредет в голову создать переменную совпадающую по имени с системным объектом.
Вот этот код даст ошибку:
Код: plaintext
1.
2.
3.
4.
Sub a()
    For Each ActiveCell In Range("A1:A4")
        ActiveCell.Offset( 0 ,  2 ).Value = ActiveCell.Value
    Next
End Sub
А вот этот не даст:
Код: plaintext
1.
2.
3.
4.
5.
Sub a()
    Dim ActiveCell As Range
    For Each ActiveCell In Range("A1:A4")
        ActiveCell.Offset( 0 ,  2 ).Value = ActiveCell.Value
    Next
End Sub


Переменная ActiveCell as range у меня объявленна как глобальная, поэтому код и работал. Однако, теперь я понимаю что это неправильно называть переменную именем совподающим с именем системного объекта.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Один код, один набор данных - результат разный
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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