Страницы: 1 2 След.
RSS
Запуск формы при открытии книги с видимостью этой книги false, VBA
 
Здравствуйте.
Подскажите, пож-та, как сделать так, что-бы при открытии нужного файла Exel *****.xlsm происходил запуск формы с последующим скрытием данной книги. Для дальнейшей работы должна остаться видимой только форма.
Автозапуск формы получается, но следующая строка скрывает все остальные открытые книги Excel, а нужно чтобы скрывалась только эта книга.
Код
Private Sub Workbook_Open()
   UserForm1.Show
   Application.Visible = False
End Sub
Запись ThisWorkbook.Windows(1).Visible = False оставляет пустое окно Excel.  Exel остается видимым, а нужно действие такое же как при исполнении кода Application.Visible = False, только для данного файла. т.е. для простого пользователя при двойном клике должна открыться только форма. Если на момент запуска открыты другие файлы Excel, они не должны быть затронуты.. Если данный файл запускается первым, то тоже должна быть видна только форма, без пустого Excel.
Изменено: asesja - 25.02.2022 22:21:18
 
Цитата
asesja написал:
ThisWorkbook.Windows(1).Visible = False после закрытия меняет файл
так Вы при закрытии формы возвращайте видимость окна и все будет ОК.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
может так?
Код
Private Sub Workbook_Open()
    Application.Visible = False
    UserForm1.Show
    Application.Visible =true
End Sub
 
1. исправьте:
Код
Private Sub Workbook_Open()
   UserForm1.Show
End Sub
2. Скройте книгу,
3. закройте Excel, на вопрос сохранить - сохраните
4. открывайте, наслаждайтесь
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Дмитрий(The_Prist) Щербаков  написал:
при закрытии формы возвращайте видимость окна и все будет ОК.
Подскажите, как? При каком событии формы? Если файл будет открываться первым, то пустой Excel остается видимым, а нужна только форма. Дописал уточнение.
Изменено: asesja - 25.02.2022 11:59:53
 
Цитата
Александр Моторин написал:
может так?
Ничего не меняется.
Изменено: asesja - 25.02.2022 12:00:57
 
Цитата
Ігор Гончаренко написал:
1. исправьте:Код ? 123Private Sub Workbook_Open()   UserForm1.ShowEnd Sub2. Скройте книгу, 3. закройте Excel, на вопрос сохранить - сохраните4. открывайте, наслаждайтесь
Спасибо. Думал что уже получилось то что хотел, но если файл запускать первым, то на фоне все равно фигурирует пустое окно Excel, а нужно чтобы была видна только форма. Дописал уточнение.
Изменено: asesja - 25.02.2022 12:01:33
 
Цитата
asesja написал:
Если файл будет открываться первым, то пустой Excel остается видимым
так а как Вы хотели-то? Если открыта только одна книга, а Вы и ту скрываете. Да, будет пустое приложение. Определитесь для начала, что при каких условиях должно быть видимым и тогда можно будет решение найти.
Цитата
asesja написал:
а нужно чтобы была видна только форма
а если мы эту книгу открыли не первой? Тогда что?
Цитата
asesja написал:
При каком событии формы?
событие закрытия формы. Есть там такое QueryClose
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Определитесь для начала, что при каких условиях должно быть видимым и тогда можно будет решение найти.
Дмитрий, дописал уточнение в первом сообщении.
Нужно, чтобы всегда была видна только форма при запуске данного файла (форма из этого файла). Если файл открывается первым, то excel не должен быть виден, только форма. Если открытие файла происходит когда уже открыты несколько других файлов, то при открытии тоже должна запускаться только форма, изменение видимости ранее открытых файлов не должно меняться. Т.е. в какой бы момент пользователь не запустил данный файл всегда должна запускаться (быть видна) только форма.
Не знаю как еще объяснить по другому.
 
Цитата
asesja: Т.е. в какой бы момент пользователь не запустил данный файл всегда должна запускаться (быть видна) только форма
засуньте форму в нвдстройку и подключите к Excel - теперь форма всегда будет доступна, никакие дополнительные книги не будут открываться и это очень легко и правильно
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
засуньте форму в нвдстройку и подключите к Excel - теперь форма всегда будет доступна, никакие дополнительные книги не будут открываться и это очень легко и правильно
В надстройку не нужно. Нужный мне макрос должен находится в фале и форма должна появляться при его запуске (как будто запускаешь exe в котором при запуске выводится форма)
Если даже поместить в надстройку, то все равно эту форму можно вывести только при открытом excel, а нужно именно при открытии данного файла.
Мне нужно именно как я описал. Может я непонятно объясняю просто?  
 
код в сообщении 4 замените на такой:
Код
Private Sub Workbook_Open()
  Application.Visible = Not (Workbooks.Count = 1 Or _
  (Workbooks.Count = 2 And Workbooks(1).Name = "PERSONAL.XLSB"))
  UserForm1.Show
  Application.Visible = True
  ThisWorkbook.Close False
End Sub
Изменено: Ігор Гончаренко - 25.02.2022 13:22:34
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
asesja написал:
Т.е. в какой бы момент пользователь не запустил данный файл всегда должна запускаться (быть видна) только форма
это никак не вяжется с этим
Цитата
asesja написал:
изменение видимости ранее открытых файлов не должно меняться
Но тем не менее, сделать можно так:
Код
Sub ShowForm()
        Dim lcnt&
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            If wb.Windows(1).Visible Then
                lcnt = lcnt + 1
            End If
        End If
    Next
    If lcnt Then 'какие-то книги уже открыты
        ThisWorkbook.Windows(1).Visible = False
        UserForm1.Show
        ThisWorkbook.Windows(1).Visible = True
    Else
        Application.Visible = False
        UserForm1.Show
        Application.Visible = True
    End If
End Sub

осталось понять, что именно делать при закрытии формы - закрывать так же файл или нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
код в сообщении 4 замените на такой:
Не работает. Если имеются открытые файлы excel, то при запуске просто моргает окно и закрывается. Если открывать файл первым, то запускается пустой Excel без формы.
На всякий случай уточню, что у меня нет Личной книги макросов, но имеются подключенные надстройки. На разных ПК данная ситуация может отличаться, поэтому нужный макрос будет записан в этом открываемом файле Excel ****.xlsm.
 
Цитата
написал:
осталось понять, что именно делать при закрытии формы - закрывать так же файл или нет.
Дмитрий, да закрывать. Правильно спросили.
 
Код
Private Sub Workbook_Open()
    If Workbooks.Count = 1 Then
        Application.Visible = False
    Else
        Me.Windows(1).Visible = False
    End If
    UserForm1.Show
End Sub
 
Цитата
asesja написал:
да закрывать
Т.е. сами по образцу это сделать не сможете, что ли? :)
Код
Sub ShowForm()
    Dim lcnt&
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            If wb.Windows(1).Visible Then
                lcnt = lcnt + 1
            End If
        End If
    Next
    
    If lcnt Then 'какие-то книги уже открыты
        ThisWorkbook.Windows(1).Visible = False
        UserForm1.Show
        ThisWorkbook.Windows(1).Visible = True
        ThisWorkbook.Close False 'если надо закрывать без сохранения
    Else
        Application.Visible = False
        UserForm1.Show
        ThisWorkbook.Close False 'если надо закрывать без сохранения
        Application.Quit
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Но тем не менее, сделать можно так:
Дмитрий, не работает. Форма открывается вместе с книгой.
 
Цитата
asesja написал:
Форма открывается вместе с книгой
с какой именно? Куда и на какое событие вставляли код? Чего от кода ожидаете?
Я лично все проверил - если есть хоть одна открытая книга - то книга с кодом скрывается, остальные остаются видимыми, поверх появляется форма. Если открывается только книга с кодом и нет других видимых книг - то появляется только форма, а Excel полностью скрывается.
А если по сути вопроса - да, форма всегда будет открываться вместе с книгой, т.к. форма внедрена в книгу, она её часть и без книги открываться просто не может по определению.
Изменено: Дмитрий(The_Prist) Щербаков - 25.02.2022 13:55:30
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
RAN
Ран, почти то, что нужно, но если открыть первым файл с макросом, то затем любой следующий открытый файл Excel делает видимым Excel у которого форма.
И как задал вопрос Дмитрий Щербаков, хорошо бы при закрытии формы закрывать и саму книгу.
 
Цитата
asesja написал:
если открыть первым файл с макросом, то затем любой следующий открытый файл Excel делает видимым Excel у которого форма
так в условии не было ни слова о том, что надо отслеживать еще и последующие открываемые файлы! Вы сами понимаете, что одним кодом это действие не отследить? Надо писать обработку класса на отслеживание событий приложения, чтобы проверять - если форма открыта, то одно, если нет, то другое...
Плюс вопрос - а как же люди при открытой форме у Вас файлы-то открывают? У меня почему-то не получается. Вопрос на засыпку - форма в модальном режиме открывается или ShowModal = False? Если режим модальный - то даже если файл будет открыт, то показан он будет исключительно после закрытия формы.
В общем - принцип основной вроде бы показан и далеко не в единственном варианте, а под все остальные свои условия постарайтесь написать хоть что-то сами. А когда все условия будут обдуманы, проверены и испытаны, но решение так и не будет найдено - милости просим. А то что-то получается, что мы тут должны угадывать что Вы там еще делаете внутри формы, до запуска, во время работы с формой и после и какие еще условия сопутствуют всему этому(не говорю уже про то, что никто не понимает конечной цели этой все задумки).
Изменено: Дмитрий(The_Prist) Щербаков - 25.02.2022 14:12:57
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
От вам не лень, ей богу  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Т.е. сами по образцу это сделать не сможете, что ли?
Дмитрий, извините, но просто моргает и закрывается.

Наверное буду решать вопрос как-то по другому, если нельзя сделать так, как я спросил.
Спасибо.
Изменено: asesja - 25.02.2022 14:16:53
 
Цитата
asesja написал:
просто моргает и закрывается
не знаю, что у Вас там происходит. Информации мало - нужно точно знать, установлено ли свойство формы ShowModal в true. Если нет - то  так и будет моргать и закрываться, т.к. в этом случае форма запускается и не происходит ожидания её закрытия и код идет дальше - следовательно книга просто закрывается.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
форма в модальном режиме открывается или ShowModal = False?
Дмитрий, ShowModal = False. Если true, то работа с другими файлами не возможна, как вы и написали.
Изменено: asesja - 25.02.2022 14:24:45
 
Цитата
asesja написал:
ShowModal = False?
это вопрос о чем? Краткость не всегда сестра таланта. Я вроде выше все расписал.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
пора автору дать возможность помедитировать, подумать над задачей....
глядишь - и сформулирует что-то внятное
как говорится, вечно можно смотреть на 3 вещи:
- как горит огонь
- как течет вода
- и как завсегдатаи форума пытаются угадать, что нужно автору вопроса
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
это вопрос о чем?
Дмитрий, исправил.
 
Цитата
asesja написал:
Дмитрий, исправил
ну так это у Вас проблемы с базовым пониманием принципов работы с формами. Я уже выше пояснил - если работаете с формой в немодальном режиме - то вот эти строки:
Цитата
Дмитрий(The_Prist) Щербаков написал:
ThisWorkbook.Windows(1).Visible = False
UserForm1.Show
ThisWorkbook.Windows(1).Visible = True
ThisWorkbook.Close False 'если надо закрывать без сохранения
выполняются сразу без остановок.
Следовательно, читаем тему выше, где я писал какое событие формы надо использовать для обработки закрытия формы
Цитата
Дмитрий(The_Prist) Щербаков написал:
событие закрытия формы. Есть там такое QueryClose
и продумывать логику действий исходя из всех условий(открытие файлов в процессе работы с формой и поведение приложения и формы в этих случаях).
Изменено: Дмитрий(The_Prist) Щербаков - 25.02.2022 14:32:06
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, всем, кто отозвался. Все правы, что задача сформулирована не полностью.
Так получается, когда одно цепляется за другое по мере прохождения определенного этапа и апробации предложенных вариантов. Изначально не всегда думаешь, что при выполнении какого либо действия, возымевшего положительный, или частично положительный, результат, вытекает другие обстоятельства, о которых до этого не думал, т.к. вообще не о чем было подумать (ничего не получалось и результата не было).

Формулировка после получения и апробации предложенных вариантов:
При запуске имеющегося файла с формой(макросом) ***.xlsm необходимо, чтобы запускалась (была видна) только форма UserForm1, независимо первым данный файл будет запущен или уже после того, когда имеются открытые книги. Если запускается первым, то открытие других файлов Excel не должно делать видимым эту книгу (в которой форма).  Форама не модальная. На ней будут размещены различные элементы управления для своих задач.
При закрытии формы её книга тоже должна закрываться.
Дополнительно: на моем ПК имеются подключенные надстройки и отсутствует Личная книга макросов, но эти данные не должны влиять, на ход выполнения задачи, т.к. на различных ПК могут отличаться.
Изменено: asesja - 25.02.2022 22:33:11
Страницы: 1 2 След.
Читают тему
Наверх