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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2009, 15:14   #1
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию скрытие листов с последующем открытием

Доброго времени суток!!! Столкнулся с такой проблемой, хочу сделать так что бы ввод на лист происходил только с формы, суть проблемы заключается в следующем: для ввода разных данных я использую несколько форм (просто так визуально более понятно что вводится, а не все сразу на одной форме) , поэтому нужно между ними переключатся для переключения я использую следующее:
Код:
UserForm2.Show 0
Unload UserForm1
UserForm1.Show 0
Unload UserForm2
Дальше следует скрытие листа, так как срыть все листы нельзя, потому что один постоянно должен быть видимым, (а хотелось бы, чтобы все были скрыты), для этого я использую следующее:
Код:
ThisWorkbook.IsAddin = True
Application.ScreenUpdating = False
ThisWorkbook.IsAddin = False
При использовании модальных форм все нормально, но тогда возникают проблемы при переключении между формами, при использовании немодальных форм моя конструкция по скрытию всех листов не работает. Что можно сделать? И как это исправить, или переделать?
Screame вне форума Ответить с цитированием
Старый 05.11.2009, 15:30   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
при использовании немодальных форм моя конструкция по скрытию всех листов не работает
Результат изменения свойства ThisWorkbook.IsAddin, по идее, никак не зависит от модальности форм.
Всё должно работать.

PS: Вместо Unload UserForm1 в данном случае лучше использовать UserForm1.hide - зачем каждый раз выгружать форму из памяти, когда её можно просто скрыть.

Непонятен смысл строки Application.ScreenUpdating = False внутри этого кода:
Код:
ThisWorkbook.IsAddin = True
Application.ScreenUpdating = False
ThisWorkbook.IsAddin = False
Почему бы не оставить одну строку: ThisWorkbook.IsAddin = True
А при закрытии всех форм отобразить листы: ThisWorkbook.IsAddin = False
EducatedFool вне форума Ответить с цитированием
Старый 05.11.2009, 15:41   #3
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Непонятен смысл строки Application.ScreenUpdating = False внутри этого кода:
Код:
ThisWorkbook.IsAddin = True
Application.ScreenUpdating = False
ThisWorkbook.IsAddin = False
Почему бы не оставить одну строку: ThisWorkbook.IsAddin = True
А при закрытии всех форм отобразить листы: ThisWorkbook.IsAddin = False
Понимаете, на одной из форм я использую автофильтр на листе, а потом выгружаю результат в ListBox на форме, как использовать автофильтр на на листе не активируя лист, я не знаю вот потому отрываю листы но использую Application.ScreenUpdating = False
Screame вне форума Ответить с цитированием
Старый 05.11.2009, 22:20   #4
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

Прошу взглянуть на мой пример, переключение между формами работает, но вот только после переключения с первой формы на другую, а потом обратно с второй на первую вторая почему то продолжает оставаться видимой хоть и не активной. Или может это только у меня какой-то глюк. И второе, при простом перемещении формы1 из стороны в сторону она начинает двоится и троится, в зависимости от количества перемещений.
Вложения
Тип файла: zip Книга1.zip (11.9 Кб, 22 просмотров)
Screame вне форума Ответить с цитированием
Старый 06.11.2009, 02:03   #5
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

Не знаю как у Вас, но у меня в 2007 отпечатков форм не остается..
Ты же отключил обновление экрана строкой
Application.ScreenUpdating=False
После которой Excel попросту не перерисовывает свою область в результате чего на ней остаются всевозможные "отпечатки" других форм и приложений, если надо сделать красиво, то при необходимости, включай а потом выключай обновление экрана, т.е. сначала = True а потом снова False, 2мя строчками
tolikman вне форума Ответить с цитированием
Старый 06.11.2009, 05:18   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Я бы не использовал свойство IsAddin. В данном случае, по-моему, лучше скрывать приложение. А для того, чтобы при переключении форм предыдущая форма выгружалась (скрывалась), используйте немодальные формы, т.к. после открытия очередной формы в модальном режиме, все дальнейшие команды блокируются (не выполняются). Так, если, например, записать
Код:
UserForm2.Show 'модальное окно
Unload Me
то Unload Me не будет выполнено. Надеюсь, понятно объяснил? Посмотрите пример во вложении.
Вложения
Тип файла: rar Книга1.rar (10.5 Кб, 32 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 06.11.2009, 10:13   #7
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

Спасибо, SAS888, EducatedFool, tolikman наконецто я во всем этом разобрался!
Screame вне форума Ответить с цитированием
Старый 10.11.2009, 16:19   #8
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

Уважаемый SAS888, заметил одну неприятную вещь, при использовании Application.ScreenUpdating = False, все работает но если в этот момент активна еще одна книга,которая не имеет никакого отношения к этим формам, просто активна, тогда скрываются обе книги.
Screame вне форума Ответить с цитированием
Старый 11.11.2009, 04:36   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
если в этот момент активна еще одна книга,которая не имеет никакого отношения к этим формам, просто активна, тогда скрываются обе книги.
Так и должно быть. А что, Вам это не подходит? Вы же говорили, что
Цитата:
хотелось бы, чтобы все были скрыты
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.11.2009, 09:12   #10
Screame
Форумчанин
 
Аватар для Screame
 
Регистрация: 27.05.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Так и должно быть. А что, Вам это не подходит? Вы же говорили, что
Чтобы задать правильный вопрос, нужно знать часть ответа. Я неправильно выразился, когда говорил что все должны быть скрыты я говорил о листах в книге которой находятся формы, а ко всем остальным книгам которые активны в данный момент, они не имеют никакого отношения. Эти книги должны быть видны.

Последний раз редактировалось Screame; 11.11.2009 в 09:15.
Screame вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с открытием файла (C++) Скарам Помощь студентам 6 09.09.2009 15:31
Проблема с открытием фотографий artemavd Операционные системы общие вопросы 6 19.08.2009 19:12
Помогите с автоматическим открытием файлов Maladoj Общие вопросы .NET 5 03.04.2009 00:40
Проблема с открытием дисков!! Merphi Операционные системы общие вопросы 4 24.12.2008 09:35
VSL Form, проблемы с открытием si13 Общие вопросы Delphi 1 03.07.2008 05:56