Vba свернуть excel в трей

Установка состояния окна приложения Excel из кода VBA с помощью свойства Application.WindowState. Сворачивание и разворачивание окна. Чтение данных о состоянии окна.

Application.WindowState — это свойство, которое задает или возвращает состояние окна приложения Excel.

Состояние окна приложения Excel задается константой из коллекции XlWindowState, при чтении информации о состоянии окна — свойство Application.WindowState возвращает числовое значение константы.

Свойство Application.WindowState позволяет развернуть окно приложения Excel из кода VBA на весь экран — до максимального размера, свернуть окно «в иконку» или задать ему нормальные размеры, установленные ранее, развернув из свернутого или свернув из максимального.

Синтаксис свойства WindowState объекта Application:

Константы XlWindowState

Константы из коллекции XlWindowState:

Константа Значение Описание
xlMaximized -4137 Максимальное окно (развернуто на весь экран)
xlMinimized -4140 Минимальное окно (свернуто «в иконку»)
xlNormal -4143 Нормальное окно (размеры, установленные ранее)

Пример кода с WindowState

Пример записи и чтения свойства Application.WindowState:

Sub Test()

‘Запись свойства WindowState

Application.WindowState = xlMaximized  ‘или -4137

‘Application.WindowState = xlMinimized  ‘или -4140

‘Application.WindowState = xlNormal  ‘или -4143

‘Проверка, в каком состоянии находится окно приложения

MsgBox Application.WindowState

End Sub

Попробуйте по очереди задавать разные константы свойству Application.WindowState и смотрите, какое значение будет считано. У меня получились удивительные результаты при выполнении строк кода по очереди, как в примере:

  • Application.WindowState = xlMinimized — MsgBox возвращает совсем не -4140;
  • после первого запуска Application.WindowState = xlNormal — окно приложения разворачивается на весь экран, после второго запуска — переходит к нормальному состоянию.

Не удалось мне добиться значения -4140 и при минимизации окна вручную, разместив предварительно следующий код в модуль книги:

Private Sub Workbook_WindowResize(ByVal Wn As Window)

    MsgBox Application.WindowState

End Sub


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

Что сейчас сделано: форма убирается в системный трей по щелчку на кнопке закрыть, и обратно восстанавливается на экране поверх всех окон. Значок в системном трее соответственно появляется и исчезает (см. приложенный файл)

Куда копать? Мозги уже себе сломал(((

Спасибо

0 / 0 / 0

Регистрация: 02.01.2017

Сообщений: 123

1

Сворачивание в трей

26.03.2017, 15:18. Показов 1237. Ответов 4


Студворк — интернет-сервис помощи студентам

День добрый, друзья.

Не подскажете — есть ли такой макрос, чтобы сворачивать окно экселевской книги — в трей.
Трэй — это место на рабочем столе, где часы находятся.

Событие Workbook_Open
Иными словами — книга открывается, тут же срабатывает макрос и книга сворачивается в трей.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

26.03.2017, 15:18

Ответы с готовыми решениями:

Сворачивание в трей
Здравствуйте.Подскажите пожалуйста как с помощью элемента NotifyIcon можно свернуть программу в…

Сворачивание в трей
День добрый форумчане, у меня небольшая проблемка, надеюсь вы поможете её решить, написал кликер,…

Сворачивание в трей
Здравствуйте. Вопрос такой:
Я вот сделал чтобы программка сворачивалась в трей, и мне нужно чтоб…

Сворачивание в трей
Всем привет!
Только начал разбираться с андроидом, как сразу столкнулся с проблемой — как свернуть…

4

toiai

3217 / 966 / 223

Регистрация: 29.05.2010

Сообщений: 2,085

26.03.2017, 17:32

2

В трей не получится, а вот свернуть на панель можно, вставь в событие Workbook_Open:

Visual Basic
1
Application.WindowState = xlMinimized



0



0 / 0 / 0

Регистрация: 02.01.2017

Сообщений: 123

27.03.2017, 01:16

 [ТС]

3

toiai, мне нужно именно в трей, а не на панель.



0



Модератор

6792 / 2814 / 527

Регистрация: 24.04.2011

Сообщений: 5,308

Записей в блоге: 10

27.03.2017, 05:57

4

lixar21, есть проект для VB6. Попробуйте адаптировать под VBA, самому интересно выйдет или нет?
Отпишитесь, что получится!



0



0 / 0 / 0

Регистрация: 02.01.2017

Сообщений: 123

27.03.2017, 13:18

 [ТС]

5

Pro_grammer , спасибо.
Попробую использовать эту технологию….



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

27.03.2017, 13:18

5

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    Как поместить Excel в трей Windows

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    25.01.06, 07:03

      По количеству и качеству предложенных ответов на предыдущий свой вопрос понял, что на форуме присутствуют специалисты своего дела 8-)

      Вопрос такой, имеется ли возможность поместить запущенную книгу Excel в трей к часам Windows2000/XP и чтобы
      книга периодически выдавала сообщения (при подводе мышки или щелчке) — содержимое какой-нибудь ячейки например.
      Это просто интересно с точки зрения возможностей Excel и есть пара идей использования.

      Profi

      winsoft



      Сообщ.
      #2

      ,
      28.01.06, 10:24

        Бонд. Джеймс Бонд.

        *****

        Рейтинг (т): 49

        Это можно вообще-то сделать только из нормального Visual Basic… :huh:


        Avsha



        Сообщ.
        #3

        ,
        29.01.06, 04:25

          winsoft
          Спасибо за отклик, но может я не очень верно сформулировал вопрос.
          Кстати вы не могли общими словами поведать, как это реализуется на VB?

          Я имел в виду все возможные способы отображения Excel-ом результатов своей работы (проведенных вычислений).
          Это могут быть всплывающие формы, сообщения из трея Windows и т.д.

          Что хотелось …
          Чтобы Excel не висел постоянно в панели задач, а выполнялся где-нибудь скрыто и незаметно для пользователя, а выдавал свои сообщения лишь по требованию или через заданный промежуток времени, или по конкретному событию.

          Например я сформировал рабочую книгу xls, которая выдает рекомендации о наиболее выгодном подключении dial-up из провайдеров, текущей температуре за окном, основные расчетные показатели для персонала, сигналы диагностики нарушения работоспособности технических комплексов и т.д.
          Конечно, вы скажете что для каждой из подобных задач существуюет специализированное ПО.
          Но по опыту работы, обычному пользователю наиболее ближе Excel и Word, причем многие системы сбора данных имеют надстройки для Excel и используют его как клиента, предоставляя данные.


          Змей



          Сообщ.
          #4

          ,
          29.01.06, 09:12

            Excel — средство для вычислений и хранения результатов. Всё остальное лучше делать на нормальном ВБ. Excel можешь использовать для жранения какой-нить инфы (но я бы этого не делал… база Access прикольнее…)


            SV()



            Сообщ.
            #5

            ,
            29.01.06, 18:18

              Senior Member

              ****

              Рейтинг (т): 40

              Ну, если использовать только Excel и vba, то на мой взгляд, ответ однозначен: никак.

              Но есть великий и могучий API. :D

              Скрыть Excel очень просто: надо найти его хендл, и послать функцией ShowWindow ему сообщение 0 (SW_HIDE), чтобы вернуть взад — 5 (SW_SHOW)
              Касаемо значка в трае не знаю, никогда с такой задачей не сталкивался, но навскидку в инете нашлось кое-что.
              Вот, например глянь это: Как добавить/удалить иконку в SysTray?

              З.Ы. Ответы на такие вопросы также стоит поискать в разделе по API, или вообще на форуме С++/Delfi спросить что-нибудь вроде: как свернуть в трай приложение, если оно этого делать не умеет? Правда придется переводить код с С++ на basic :(

              Сообщение отредактировано: SV() — 29.01.06, 18:20


              Avsha



              Сообщ.
              #6

              ,
              30.01.06, 06:22

                Спасибо, принимаю рекомендации и советы,
                по этому вопросу не стоит конкретной горящей задачи, поэтому напрягаться особого смысла нет.

                А все равно червячок остался,
                что неплохо Excel-ю обзавестись легконастраиваемой системой вывода сообщений пользователю по времени или событию.
                Чтож — будем ждать, может такая готовая функция когда-нибудь в нем появится :rolleyes:


                Змей



                Сообщ.
                #7

                ,
                30.01.06, 16:31

                  Вот пример создания trayicon из ВБА. правда под Ворд, он мне привычнее чем ексел.

                  ЗЫ. кажется, в этом примере отсутствует TrayIcon_Click… как сделать — ищите сами, кому надо…

                  Прикреплённый файлПрикреплённый файлОткрой_VBA_и_запусти_Форму.rar (36 Кбайт, скачиваний: 218)


                  Змей



                  Сообщ.
                  #8

                  ,
                  30.01.06, 19:26

                    ЗЫ. более чем 90% кода этого примера — из недавней темы «TrayIcon» с форума «ВБ, общие вопросы». Моё здесь — только незначительная адаптация под VBA.

                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                    0 пользователей:

                    • Предыдущая тема
                    • VB for Application
                    • Следующая тема

                    Рейтинг@Mail.ru

                    [ Script execution time: 0,0253 ]   [ 16 queries used ]   [ Generated: 14.04.23, 17:37 GMT ]  

                    Формулировка задачи:

                    День добрый, друзья.
                    Не подскажете — есть ли такой макрос, чтобы сворачивать окно экселевской книги — в трей.
                    Трэй — это место на рабочем столе, где часы находятся.
                    Событие Workbook_Open
                    Иными словами — книга открывается, тут же срабатывает макрос и книга сворачивается в трей.

                    Код к задаче: «Сворачивание в трей»

                    textual

                    Application.WindowState = xlMinimized

                    Полезно ли:

                    13   голосов , оценка 4.077 из 5

                    Skip to content

                    WindowState Property of Application Object VBA

                    By PNRaoLast Updated: March 2, 2023

                    Effectively Manage Your
                    Projects and  Resources

                    With Our Professional and Premium Project Management Templates!

                    ANALYSISTABS.COM provides free and premium project management tools, templates and dashboards for effectively managing the projects and analyzing the data.

                    We’re a crew of professionals expertise in Excel VBA, Business Analysis, Project Management. We’re Sharing our map to Project success with innovative tools, templates, tutorials and tips.

                    Project Management
                    Excel VBA

                    Download Free Excel 2007, 2010, 2013 Add-in for Creating Innovative Dashboards, Tools for Data Mining, Analysis, Visualization. Learn VBA for MS Excel, Word, PowerPoint, Access, Outlook to develop applications for retail, insurance, banking, finance, telecom, healthcare domains.

                    Analysistabs Logo

                    Page load link

                    VBA Projects With Source Code

                    3 Realtime VBA Projects
                    with Source Code!

                    Take Your Projects To The Next Level By Exploring Our Professional Projects

                    Go to Top

                    Свернуть окно Excel, а форму показать

                    devilkurs

                    Дата: Четверг, 18.02.2016, 13:10 |
                    Сообщение № 1

                    Группа: Проверенные

                    Ранг: Форумчанин

                    Сообщений: 167


                    Репутация:

                    43

                    ±

                    Замечаний:
                    0% ±


                    Excel 2007, 2010

                    День добрый.

                    Что-то я никак не соображу. Подскажите плиз. При вызове формы надо свернуть окно Excel, но чтобы форма осталась видна.
                    .visible=false не катит
                    При
                    [vba]

                    Код

                    Application.WindowState = xlMinimized

                    [/vba]
                    сворачивает и окно Ecxel и форму. Причем не важно в какой последовательности выполнить WindowState и UserForm1.Show ИЛИ WindowState засунуть в UserForm_Initialize.

                    Сейчас обнаружил что на разных компах (офис один и тот же, и винда хр у всех) ведет себя по разному. На одних форма остается видна на других сворачивается вместе с окном.

                    К сообщению приложен файл:

                    0404920.xlsm
                    (15.2 Kb)


                     

                    Ответить

                    Manyasha

                    Дата: Четверг, 18.02.2016, 13:20 |
                    Сообщение № 2

                    Группа: Модераторы

                    Ранг: Старожил

                    Сообщений: 2198


                    Репутация:

                    898

                    ±

                    Замечаний:
                    0% ±


                    Excel 2010, 2016

                    devilkurs, можно сначала свернуть окно, а потом форму показать:

                    не важно в какой последовательности

                    не увидела :(


                    ЯД: 410013299366744 WM: R193491431804

                    Сообщение отредактировал ManyashaЧетверг, 18.02.2016, 13:21

                     

                    Ответить

                    _Boroda_

                    Дата: Четверг, 18.02.2016, 13:29 |
                    Сообщение № 3

                    Группа: Модераторы

                    Ранг: Местный житель

                    Сообщений: 16618


                    Репутация:

                    6465

                    ±

                    Замечаний:
                    0% ±


                    2003; 2007; 2010; 2013 RUS

                    Посмотрите вот так.
                    Ваш родной файл у меня не работал, а вот если сделать форму немодальной, то заработал. Свойство ShowModal


                    Скажи мне, кудесник, любимец ба’гов…
                    Платная помощь:
                    Boroda_Excel@mail.ru
                    Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

                     

                    Ответить

                    devilkurs

                    Дата: Четверг, 18.02.2016, 13:49 |
                    Сообщение № 4

                    Группа: Проверенные

                    Ранг: Форумчанин

                    Сообщений: 167


                    Репутация:

                    43

                    ±

                    Замечаний:
                    0% ±


                    Excel 2007, 2010

                    Грандиозно! ))))))))))))))) Про свойство ShowModal совсем забыл. На других компах тоже норм начало отображать форму.

                    Чисто наблюдение: Если открыты окна разных программ, то при сворачивании Excel, инициативу перехватывают окна некоторых программ. А форма под ними остается. Но мне это сейчас непринципиально. Если пользователи просить начнут — потом буду думать )))))) наверно в сторону API смотреть надо будет.

                    Спасибо Александр. И Марине за участие )))))


                     

                    Ответить

                    al-Ex

                    Дата: Четверг, 18.02.2016, 18:05 |
                    Сообщение № 5

                    Группа: Проверенные

                    Ранг: Форумчанин

                    Сообщений: 190


                    Репутация:

                    59

                    ±

                    Замечаний:
                    0% ±


                    Excel 2010

                    наверно в сторону API смотреть надо будет.

                    Ну да, в сторону API , примерно так: «HWND_TOPMOST» — всегда поверх всех окон
                    [vba]

                    Код

                    Option Explicit

                    Private Declare Function FindWindow Lib «user32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
                    Private Declare Function SetWindowPos Lib «user32» (ByVal Hwnd As Long, ByVal hWndInsertAfter As Long, _
                    ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

                    Const SWP_NOSIZE = &H1
                    Const HWND_TOPMOST = -1
                    Dim Hwnd As Long

                    Private Sub UserForm_Initialize()

                    CommandButton1.Caption = «Lya Lya»

                    Application.WindowState = xlMinimized
                    Hwnd = FindWindow(vbNullString, «UserForm1»)
                    SetWindowPos Hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE

                    End Sub

                    [/vba]

                    К сообщению приложен файл:

                    5284118.xlsm
                    (19.9 Kb)

                    Сообщение отредактировал al-ExПятница, 19.02.2016, 02:11

                     

                    Ответить

                    devilkurs

                    Дата: Пятница, 19.02.2016, 00:35 |
                    Сообщение № 6

                    Группа: Проверенные

                    Ранг: Форумчанин

                    Сообщений: 167


                    Репутация:

                    43

                    ±

                    Замечаний:
                    0% ±


                    Excel 2007, 2010

                    al-Ex, завтра на работе посмотрю. Спасибо!


                     

                    Ответить

                    Gustav

                    Дата: Пятница, 19.02.2016, 12:51 |
                    Сообщение № 7

                    Группа: Друзья

                    Ранг: Старожил

                    Сообщений: 2398


                    Репутация:

                    986

                    ±

                    Замечаний:
                    0% ±


                    начинал с Excel 4.0, видел 2.1

                    ПрИмите в тусовку? Я решал похожую задачу в 2000 году. С тех пор вроде работало как надо во всех последующих версиях Excel, вот уже 15 лет:
                    [vba]

                    Код

                    Sub Макрос1()
                        UserForm1.Show
                    End Sub

                    [/vba]

                    У формы свойство ShowModal = True и такие обработчики событий:
                    [vba]

                    Код

                    Private Sub UserForm_Initialize()
                        …
                        Application.Visible = False
                        …    
                    End Sub

                    Private Sub UserForm_Terminate()
                        …
                        Application.Visible = True
                        …
                    End Sub

                    [/vba]С деталями можно поиграться (в буквальном смысле — там «Игра в 15») по ссылке: http://www.axforum.info/forums/showpost.php?p=107513&postcount=5


                    МОИ: Ник, Tip box: 41001663842605

                     

                    Ответить

                    SLAVICK

                    Дата: Пятница, 19.02.2016, 14:33 |
                    Сообщение № 8

                    Группа: Модераторы

                    Ранг: Старожил

                    Сообщений: 2290


                    Репутация:

                    766

                    ±

                    Замечаний:
                    0% ±


                    2019

                    У формы свойство ShowModal = True и такие обработчики событий

                    И я так делаю ^_^ beer .
                    У такого подхода есть несколько плюсов:
                    Обработка данных происходит быстрее(в моей программе примерно на 20% — проверял для интереса)
                    Пользователи не видят окно программы и как следствие не могут там ничего менять пока запущена форма. Это иногда очень важно — а то бывает понаклацают всякое :D


                    Иногда все проще чем кажется с первого взгляда.

                     

                    Ответить

                    StoTisteg

                    Дата: Воскресенье, 21.02.2016, 00:55 |
                    Сообщение № 9

                    Группа: Авторы

                    Ранг: Старожил

                    Сообщений: 1161


                    Репутация:

                    103

                    ±

                    Замечаний:
                    0% ±


                    Excel 2010

                    [offtop]О, да… Юзвери, которых надо Мелкософту в рабство продавать в качестве тестеров — глубоко отдельная тема :) [/offtop]


                    Интуитивно понятный код — это когда интуитивно понятно, что это код.

                     

                    Ответить

                    StoTisteg

                    Дата: Понедельник, 22.02.2016, 22:28 |
                    Сообщение № 10

                    Группа: Авторы

                    Ранг: Старожил

                    Сообщений: 1161


                    Репутация:

                    103

                    ±

                    Замечаний:
                    0% ±


                    Excel 2010

                    У формы свойство ShowModal = True и такие обработчики событий

                    Gustav, а зачем, кстати? Если ShowModal = True даёт возможность тыкаться по Экселю, а Application.Visible = False как раз его-то и скрывает?


                    Интуитивно понятный код — это когда интуитивно понятно, что это код.

                     

                    Ответить

                    Понравилась статья? Поделить с друзьями:
                  • Vba редактор для word
                  • Vba раскрасить ячейку excel
                  • Vba разрыв связей excel
                  • Vba работа с шаблоном word
                  • Vba работа с word application