Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Прокрутка листа или обновление экрана? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Прокрутка листа или обновление экрана? (Макросы/Sub)
Прокрутка листа или обновление экрана?
Невилл Дата: Суббота, 12.11.2016, 14:50 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 2 ±
Замечаний: 0% ±

Excel 2007
Ребята, буду очень благодарен, если подскажете, в чем проблема с этим файлом.
ПРЕДУПРЕЖДЕНИЕ: после исполнения макроса на листе "Звіт" у меня перестает работать то ли прокрутка листа, то ли ScreenUpdating (хотя, если верить vba, то вроде True) и сам файл закрыть получалось только с Ctrl+Alt+Del. Так что перед открытием, лучше закрыть свои другие файлы.
Подробности вот в анимашке:
Эта проблема у меня возникла дома на Excel2016, с Excel2010 на работе ничего подобного не было. И никак не могу ее решить...
Притом, в перспективе этот файл использовать придется ежедневно, и возможно, не только мне. Надо определить причину проблемы как-то...

Вкратце, я сейчас разрабатываю систему учета дебиторки. После нажатия на кнопку "Отчет" должна запуститься юзерформа.
После выбора параметров она их передает в Generate_Report и та, в свою очередь формируется отчет, обрабатывая данные других листов.

В оригинальном файле десятки тысяч строк, потому выполнение макроса без отключения ScreenUpdating и Calculation(Auto) ждать слишком долго.
В отдельном модуле OptimizeCode есть соответствующие процедуры. Может с ним, что не так? Хотя этот модуль от проекта к проекту копирую, проблем раньше не было.

Никто не сталкивался с чем-то подобным? Где я допустил ошибку? Связано ли это с юзерформой как-то?
Если можете, отпишите, у всех ли подобная проблема с этим файлом наблюдается (и версию офиса, пожалуйста).
К сообщению приложен файл: 0720693.xlsm(80Kb)
 
Ответить
СообщениеРебята, буду очень благодарен, если подскажете, в чем проблема с этим файлом.
ПРЕДУПРЕЖДЕНИЕ: после исполнения макроса на листе "Звіт" у меня перестает работать то ли прокрутка листа, то ли ScreenUpdating (хотя, если верить vba, то вроде True) и сам файл закрыть получалось только с Ctrl+Alt+Del. Так что перед открытием, лучше закрыть свои другие файлы.
Подробности вот в анимашке:
Эта проблема у меня возникла дома на Excel2016, с Excel2010 на работе ничего подобного не было. И никак не могу ее решить...
Притом, в перспективе этот файл использовать придется ежедневно, и возможно, не только мне. Надо определить причину проблемы как-то...

Вкратце, я сейчас разрабатываю систему учета дебиторки. После нажатия на кнопку "Отчет" должна запуститься юзерформа.
После выбора параметров она их передает в Generate_Report и та, в свою очередь формируется отчет, обрабатывая данные других листов.

В оригинальном файле десятки тысяч строк, потому выполнение макроса без отключения ScreenUpdating и Calculation(Auto) ждать слишком долго.
В отдельном модуле OptimizeCode есть соответствующие процедуры. Может с ним, что не так? Хотя этот модуль от проекта к проекту копирую, проблем раньше не было.

Никто не сталкивался с чем-то подобным? Где я допустил ошибку? Связано ли это с юзерформой как-то?
Если можете, отпишите, у всех ли подобная проблема с этим файлом наблюдается (и версию офиса, пожалуйста).

Автор - Невилл
Дата добавления - 12.11.2016 в 14:50
Невилл Дата: Суббота, 12.11.2016, 15:08 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 2 ±
Замечаний: 0% ±

Excel 2007
Хм... Попробовал еще раз поочередно поотключать процедуры, чтобы локализовать проблему.

Вероятно, моя проблема как-то связана вот с этими строчками в процедуре cmdGenerate_Click (в конце)
[vba]
Код
    ThisWorkbook.Sheets("Звіт").Activate
    ThisWorkbook.Sheets("Звіт").Cells(2, 1).Select
[/vba]
Только не пойму, почему именно происходит сбой...
 
Ответить
СообщениеХм... Попробовал еще раз поочередно поотключать процедуры, чтобы локализовать проблему.

Вероятно, моя проблема как-то связана вот с этими строчками в процедуре cmdGenerate_Click (в конце)
[vba]
Код
    ThisWorkbook.Sheets("Звіт").Activate
    ThisWorkbook.Sheets("Звіт").Cells(2, 1).Select
[/vba]
Только не пойму, почему именно происходит сбой...

Автор - Невилл
Дата добавления - 12.11.2016 в 15:08
fairylive Дата: Суббота, 12.11.2016, 16:54 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
А если отдельно сделать кнопку с процедурой
[vba]
Код
Sub ScreenUpdating()

Application.ScreenUpdating = True

End Sub
[/vba]
Иногда бывает макрос не доходит до конца, ошибки там всякие и так далее и обновление экрана не включается. Сам мучался. Потом как только заглючит таким образом жму кнопку - обновлять экран. Если дело в этом то допиши в конец программы оператор [vba]
Код
Аpplication.ScreenUpdating = True
[/vba]
 
Ответить
СообщениеА если отдельно сделать кнопку с процедурой
[vba]
Код
Sub ScreenUpdating()

Application.ScreenUpdating = True

End Sub
[/vba]
Иногда бывает макрос не доходит до конца, ошибки там всякие и так далее и обновление экрана не включается. Сам мучался. Потом как только заглючит таким образом жму кнопку - обновлять экран. Если дело в этом то допиши в конец программы оператор [vba]
Код
Аpplication.ScreenUpdating = True
[/vba]

Автор - fairylive
Дата добавления - 12.11.2016 в 16:54
KuklP Дата: Суббота, 12.11.2016, 18:30 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 1994
Репутация: 435 ±
Замечаний: 0% ±

А если отдельно сделать кнопку с процедурой
У автора и так эта процедура отдельная. И нет смысла делать еще и кнопку. Есть волшебная клавишка F9 и волшебное слово Stop если уж совсем извращаться. Все это применимо к процедуре:
[vba]
Код
Sub OptimizeCode_End()
    Application.EnableEvents = True
    Stop
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]
У меня все отрабатывает без запинки, но на 2010. 2016 нет и ставить не планирую, поэтому помочь видимо, не смогу. :(


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
А если отдельно сделать кнопку с процедурой
У автора и так эта процедура отдельная. И нет смысла делать еще и кнопку. Есть волшебная клавишка F9 и волшебное слово Stop если уж совсем извращаться. Все это применимо к процедуре:
[vba]
Код
Sub OptimizeCode_End()
    Application.EnableEvents = True
    Stop
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]
У меня все отрабатывает без запинки, но на 2010. 2016 нет и ставить не планирую, поэтому помочь видимо, не смогу. :(

Автор - KuklP
Дата добавления - 12.11.2016 в 18:30
KuklP Дата: Суббота, 12.11.2016, 18:36 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1994
Репутация: 435 ±
Замечаний: 0% ±

Невилл, попробуйте вместо двух строк вот это:
[vba]
Код
   Application.Goto Sheets("Звіт").Cells(2, 1)
[/vba]Наверняка проблему не решит, но снимет Ваши подозрения с тех строк :)


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНевилл, попробуйте вместо двух строк вот это:
[vba]
Код
   Application.Goto Sheets("Звіт").Cells(2, 1)
[/vba]Наверняка проблему не решит, но снимет Ваши подозрения с тех строк :)

Автор - KuklP
Дата добавления - 12.11.2016 в 18:36
fairylive Дата: Суббота, 12.11.2016, 18:44 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
У меня все отрабатывает без запинки, но на 2010.

А на 2016 спотыкается на какой-то ошибке. До глюка на как на картинке не добрался, чтобы проверить свою идею.
 
Ответить
Сообщение
У меня все отрабатывает без запинки, но на 2010.

А на 2016 спотыкается на какой-то ошибке. До глюка на как на картинке не добрался, чтобы проверить свою идею.

Автор - fairylive
Дата добавления - 12.11.2016 в 18:44
KuklP Дата: Суббота, 12.11.2016, 18:55 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 1994
Репутация: 435 ±
Замечаний: 0% ±

До глюка на как на картинке не добрался
Т.е. у Вас 2016 и ситуации описанной автором, не возникает? Тогда может есть смысл говорить(возможно) о некорректной установке Офиса у автора? Стоит подождать других форумчан-обладателей 2016. Ребят пожалуйста, подтвердите или опровергните наличие глюка, описанного автором.


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
До глюка на как на картинке не добрался
Т.е. у Вас 2016 и ситуации описанной автором, не возникает? Тогда может есть смысл говорить(возможно) о некорректной установке Офиса у автора? Стоит подождать других форумчан-обладателей 2016. Ребят пожалуйста, подтвердите или опровергните наличие глюка, описанного автором.

Автор - KuklP
Дата добавления - 12.11.2016 в 18:55
Невилл Дата: Суббота, 12.11.2016, 20:40 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 2 ±
Замечаний: 0% ±

Excel 2007
Спасибо всем, кто попробовал файл. Значит, скорее всего какой-то конфликт с 2016 офисом. Хотя, имхо, в таком странном месте, что не понимаю совсем. И реально этот "глюк" вызывается все же активацией листа. Все уже перепробовал, что знал. Безуспешно...

KuklP, попробовал Application.Goto и в конце макроса формы, и потом перенес его в основной модуль. Оба раза повторился тот же глюк, что на анимации. Еще попробовал set wksReport = ThisWorkbook..., тоже без разницы. Имя листа писал латиницей, удалял его...

fairylive, а не могли бы Вы подсказать, что за ошибку выдает файл и в каком месте? Был бы очень признателен за скриншот или краткое описание.
 
Ответить
СообщениеСпасибо всем, кто попробовал файл. Значит, скорее всего какой-то конфликт с 2016 офисом. Хотя, имхо, в таком странном месте, что не понимаю совсем. И реально этот "глюк" вызывается все же активацией листа. Все уже перепробовал, что знал. Безуспешно...

KuklP, попробовал Application.Goto и в конце макроса формы, и потом перенес его в основной модуль. Оба раза повторился тот же глюк, что на анимации. Еще попробовал set wksReport = ThisWorkbook..., тоже без разницы. Имя листа писал латиницей, удалял его...

fairylive, а не могли бы Вы подсказать, что за ошибку выдает файл и в каком месте? Был бы очень признателен за скриншот или краткое описание.

Автор - Невилл
Дата добавления - 12.11.2016 в 20:40
Невилл Дата: Суббота, 12.11.2016, 20:54 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 2 ±
Замечаний: 0% ±

Excel 2007
P.S. Пока такой костыль прикрутил:
[vba]
Код
Sub CommandButton1_Click()
    ThisWorkbook.Sheets("Звіт").Select
    ReportMaster.Show
End Sub
[/vba]
Выходит, что проблема проявляется, если активировать, выделять или переходить на лист в процессе формирования отчета или выхода из юзерформы... А вот, если сделать это перед запуском ЮФ, то все норм? Ну, ок :(


Сообщение отредактировал Невилл - Суббота, 12.11.2016, 20:55
 
Ответить
СообщениеP.S. Пока такой костыль прикрутил:
[vba]
Код
Sub CommandButton1_Click()
    ThisWorkbook.Sheets("Звіт").Select
    ReportMaster.Show
End Sub
[/vba]
Выходит, что проблема проявляется, если активировать, выделять или переходить на лист в процессе формирования отчета или выхода из юзерформы... А вот, если сделать это перед запуском ЮФ, то все норм? Ну, ок :(

Автор - Невилл
Дата добавления - 12.11.2016 в 20:54
fairylive Дата: Суббота, 12.11.2016, 22:33 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Невилл, опиши последовательность действий которую надо сделать. Я просто открыл файл (предварительно разблокировав его в свойствах) и нажал на кнопку, после чего появляется форма. Там что надо выбирать? Я просто жму кнопку опять. Что должно произойти? На анимации не очень видны первые действия. Вобщем вот снимки экрана.
PS пока делал снимки разобрался в чем дело. Ошибки у меня возникали так как у меня нет таких стилей - Заголовок 1, Заголовок 2 и Примечание. Заменил их на те что у меня есть Обычный 2. Программа стала выполняться. Глюк подтверждаю. И как говорил раньше он лечится макросом. У меня этот макрос на отдельной кнопке на моей вкладке с моими макросами
[vba]
Код
Sub ScreenUpdating()

Application.ScreenUpdating = True

End Sub
[/vba]
Просто вставь в самую последнюю процедуру в конец Application.ScreenUpdating = True
Я не знаю какая последняя. Поэтому не проверял сработает или нет. Но по идее должно.
К сообщению приложен файл: 4189142.png(107Kb) · 0488351.jpg(82Kb)


Сообщение отредактировал fairylive - Суббота, 12.11.2016, 22:37
 
Ответить
СообщениеНевилл, опиши последовательность действий которую надо сделать. Я просто открыл файл (предварительно разблокировав его в свойствах) и нажал на кнопку, после чего появляется форма. Там что надо выбирать? Я просто жму кнопку опять. Что должно произойти? На анимации не очень видны первые действия. Вобщем вот снимки экрана.
PS пока делал снимки разобрался в чем дело. Ошибки у меня возникали так как у меня нет таких стилей - Заголовок 1, Заголовок 2 и Примечание. Заменил их на те что у меня есть Обычный 2. Программа стала выполняться. Глюк подтверждаю. И как говорил раньше он лечится макросом. У меня этот макрос на отдельной кнопке на моей вкладке с моими макросами
[vba]
Код
Sub ScreenUpdating()

Application.ScreenUpdating = True

End Sub
[/vba]
Просто вставь в самую последнюю процедуру в конец Application.ScreenUpdating = True
Я не знаю какая последняя. Поэтому не проверял сработает или нет. Но по идее должно.

Автор - fairylive
Дата добавления - 12.11.2016 в 22:33
wild_pig Дата: Суббота, 12.11.2016, 23:01 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 85 ±
Замечаний: 0% ±

2003, 2013
2013 excel после отработки файл не закрывается. Если перейти на любой другой лист, то можно закрыть.
 
Ответить
Сообщение2013 excel после отработки файл не закрывается. Если перейти на любой другой лист, то можно закрыть.

Автор - wild_pig
Дата добавления - 12.11.2016 в 23:01
Невилл Дата: Воскресенье, 13.11.2016, 10:45 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 2 ±
Замечаний: 0% ±

Excel 2007
fairylive, ScreenUpdating не помогло, увы. У меня в коде он, к слову, как раз в конце и использовался.
Я понимаю, в чем суть, но такое решение мне не подходит (лишние кнопки другие пользователи нажимать не захотят, да и должно оно работать само). Как сказал wild pig, ручной переход между листами тоже решает проблема. Еще если зайти в VBA и выйти, экран тоже раздупляется.

Спасибо за подсказку по стилям. Честно сказать, думал, что стили вместе с файлом сохраняются, а не зависят от версии офиса. Попробую разобраться, как их зафиксировать точно.

UPD:
Если не затруднит, проверьте еще разок мой файл (на 2013 и 2016), пожалуйста. Попробовал стили прописать, как советовали на одном западном форуме, а активацию листа перенес до выполнения самого макроса. У меня на 2016 уже работает, но уверенность пошатнулась уже <_<
К сообщению приложен файл: 5276513.xlsm(82Kb)
 
Ответить
Сообщениеfairylive, ScreenUpdating не помогло, увы. У меня в коде он, к слову, как раз в конце и использовался.
Я понимаю, в чем суть, но такое решение мне не подходит (лишние кнопки другие пользователи нажимать не захотят, да и должно оно работать само). Как сказал wild pig, ручной переход между листами тоже решает проблема. Еще если зайти в VBA и выйти, экран тоже раздупляется.

Спасибо за подсказку по стилям. Честно сказать, думал, что стили вместе с файлом сохраняются, а не зависят от версии офиса. Попробую разобраться, как их зафиксировать точно.

UPD:
Если не затруднит, проверьте еще разок мой файл (на 2013 и 2016), пожалуйста. Попробовал стили прописать, как советовали на одном западном форуме, а активацию листа перенес до выполнения самого макроса. У меня на 2016 уже работает, но уверенность пошатнулась уже <_<

Автор - Невилл
Дата добавления - 13.11.2016 в 10:45
KuklP Дата: Воскресенье, 13.11.2016, 13:20 | Сообщение № 13
Группа: Проверенные
Ранг: Старожил
Сообщений: 1994
Репутация: 435 ±
Замечаний: 0% ±

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


Ну, с НДС и мы чего-то стoим! kuklp@mail.ru
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНевилл, Вы можете еще в чисто исследовательских целях скопировать данные в новый файл, пересоздать там формы и скопировать туда код. Бывало и уже не раз, в том числе на этом форуме, что виной был глючный файл. После вышеуказанных действий проблема исчезала. Только не копируйте листы и формы, а именно пересоздайте.

Автор - KuklP
Дата добавления - 13.11.2016 в 13:20
fairylive Дата: Воскресенье, 13.11.2016, 15:01 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Невилл, Про кнопку я всего лишь говорил что это проверка. У меня она решала проблему. Значит надо подправить код в нужном месте.
Проверил последний файл. Всё чётко. Без глюков и ошибок.
 
Ответить
СообщениеНевилл, Про кнопку я всего лишь говорил что это проверка. У меня она решала проблему. Значит надо подправить код в нужном месте.
Проверил последний файл. Всё чётко. Без глюков и ошибок.

Автор - fairylive
Дата добавления - 13.11.2016 в 15:01
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Прокрутка листа или обновление экрана? (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!