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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2009, 05:35   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Странная работа цикла

При вводе данных в Лист 7 при таком коде, сильно дергается кусор, я так понял, потому, что выполняется цикл в трех сравнениях для Листа 8, а во втором коде этот цикл выполняется при нахождении в Листе 8 и при переключении с Листа7 на Лист 8

Код:
If sh.Index > 6 Then
    With Sheets(8)
        .Cells(dat * 51 + 43, 10) = Sheets(7).Cells(dat * 51 + 41, 10)
    If .Cells(dat * 51 + 45, 7) > 0 Then .Cells(dat * 51 + 45, 5) = "Мы Должны"
        If .Cells(dat * 51 + 45, 7) < 0 Then .Cells(dat * 51 + 45, 5) = "НАМ Должны"
    If .Cells(dat * 51 + 45, 7) = 0 Then .Cells(dat * 51 + 45, 5) = ""
  End With
End If
Next dat
Application.EnableEvents = True
'Application.ScreenUpdating = True
   End Select
End Sub
А при таком коде, все ОК, но как может выполнятся цикл в (красном) если он закончился (синим)??

Код:
If sh.Index > 6 Then
    With Sheets(8)
        .Cells(dat * 51 + 43, 10) = Sheets(7).Cells(dat * 51 + 41, 10)
    End With
End If
If sh.Index = 8 Then
    If Cells(dat * 51 + 45, 7) > 0 Then Cells(dat * 51 + 45, 5) = "Мы Должны"
        If Cells(dat * 51 + 45, 7) < 0 Then Cells(dat * 51 + 45, 5) = "НАМ Должны"
    If Cells(dat * 51 + 45, 7) = 0 Then Cells(dat * 51 + 45, 5) = ""
End If
Next dat
Application.EnableEvents = True
'Application.ScreenUpdating = True
   End Select
End Sub
'#################################################
Private Sub Workbook_SheetActivate(ByVal sh As Object)
If sh.Index = 8 Then
    If Cells(dat * 51 + 45, 7) > 0 Then Cells(dat * 51 + 45, 5) = "Мы Должны"
        If Cells(dat * 51 + 45, 7) < 0 Then Cells(dat * 51 + 45, 5) = "НАМ Должны"
    If Cells(dat * 51 + 45, 7) = 0 Then Cells(dat * 51 + 45, 5) = ""
End If
End Sub

Последний раз редактировалось valerij; 05.03.2009 в 05:37.
valerij вне форума Ответить с цитированием
Старый 05.03.2009, 13:47   #2
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Что ни кто не может объяснить или нужно вложение?
valerij вне форума Ответить с цитированием
Старый 05.03.2009, 22:25   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Уважаемые спецы, че Вы молчите, вот сделал(не простое это дело) вложение.
1. Дергается
2. Не дергается, но цикл???
Вложения
Тип файла: rar For.rar (174.2 Кб, 10 просмотров)
valerij вне форума Ответить с цитированием
Старый 05.03.2009, 22:44   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

1) Найди макрос Private Sub Workbook_SheetChange
В нём найди такой код:
Код:
Application.EnableEvents = False
'Application.ScreenUpdating = False
Зачем строка Application.ScreenUpdating = False закомментирована?????

Убери перед ней апостроф - и не будет дёргаться.
(кстати, у меня и так нисколько не дёргается...)

2)
Цитата:
Не дергается, но цикл???
Какой цикл? Уж ни этот ли?
Код:
Private Sub Workbook_SheetActivate(ByVal sh As Object)
    If sh.Index = 2 Then
        If Cells(dat * 51 + 45, 7) > 0 Then Cells(dat * 51 + 45, 5) = "Мы Должны"
        If Cells(dat * 51 + 45, 7) < 0 Then Cells(dat * 51 + 45, 5) = "НАМ Должны"
        If Cells(dat * 51 + 45, 7) = 0 Then Cells(dat * 51 + 45, 5) = ""
    End If
End Sub
Так это не цикл... обрабатывается только две ячейки в 45-й строке. (поскольку dat=0)

Последний раз редактировалось EducatedFool; 05.03.2009 в 22:48.
EducatedFool вне форума Ответить с цитированием
Старый 05.03.2009, 23:41   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
1)Зачем строка
Application.ScreenUpdating = False закомментирована???

Убери перед ней апостроф - и не будет дёргаться.
(кстати, у меня и так нисколько не дёргается...)
В том то и дело, вложение урезанное, дерается, по этому и закоментированна!

Цитата:
2)
Какой цикл? Уж ни этот ли?
Код:
Private Sub Workbook_SheetActivate(ByVal sh As Object)
    If sh.Index = 2 Then
        If Cells(dat * 51 + 45, 7) > 0 Then Cells(dat * 51 + 45, 5) = "Мы Должны"
        If Cells(dat * 51 + 45, 7) < 0 Then Cells(dat * 51 + 45, 5) = "НАМ Должны"
        If Cells(dat * 51 + 45, 7) = 0 Then Cells(dat * 51 + 45, 5) = ""
    End If
End Sub
Так это не цикл... обрабатывается только две ячейки в 45-й строке. (поскольку dat=0)
Да, dat=0, но если я ввожу данные в D1566, то уже обрабатывается, по чему -то Е1575 в листе КОТ????? Ага, тут я понял, почему!

Для файла 1.xls
И еще заметил, если ввожу ноль, дергается, а любое др. число, нет.
И если сначало ввести данные в Лист КОТ, то тогда в Листе РЫН, ни чего не дергается!

Последний раз редактировалось valerij; 06.03.2009 в 01:02.
valerij вне форума Ответить с цитированием
Старый 06.03.2009, 16:40   #6
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
И еще заметил, если ввожу ноль, дергается, а любое др. число, нет.
Этот вопрос то же решил, объяснить не могу, заменил в:
Код:
If Cells(dat * 51 + 45, 7) = 0 Then Cells(dat * 51 + 45, 5) = ""
If Cells(dat * 51 + 45, 7) = 0 Then Cells(dat * 51 + 45, 5) = " "
И все стало ОК!
valerij вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странная ошибка.. SnakeMan БД в Delphi 4 12.02.2009 12:43
Странная статья SunKnight Свободное общение 2 20.09.2008 00:31
Странная переменная. GreenDan Помощь студентам 6 25.08.2008 19:35
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10
Странная ошибка Washington БД в Delphi 2 16.03.2007 18:13