Установка состояния окна приложения 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 |
|
Группа: Админы Ранг: Местный житель Сообщений: 18797
Замечаний: |
Макрорекодер говорит, что надо выполнить команду
[vba]
Код
Application.WindowState = xlMinimized
[/vba]
«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816
Помогаю со студенческими работами здесь
Как сохранить диаграмму в новую книгу Excel?
Добрый день, уважаемые коллеги
Подскажите пожалуйста, каким образом средствами VBA можно…
Как из Excel/Vba внести открытую книгу в SQL Server 7 как OLE объект?
Хотелось бы так:
При нажатии соотв. кнопки. соединить с SQL Serverом и сохранить activesheet в SQL…
Падает Excel при запуске макроса
Доброго времени суток, уважаемые гуру. Застрял на одном проекте. Пишу прогу на работу для себя. Всё…
Автозакрытие Excel-я при запуске формы
Скажите пожалуйста как сделать чтобы при открытии программы автоматически закрывалась книга экселя?
Искать еще темы с ответами
Или воспользуйтесь поиском по форуму:
Is there a way to minimize a workbook/sheet but able to keep the form opened up?
I have tried the code:
application.visible=false
and
userform1.show vbmodeless
But this hides the all active workbooks and the tool bar ribbon thing disappears as well. Is there a way to minimize the workbook but keep the ribbon showing and form opened as well?
FelixSFD
5,97210 gold badges47 silver badges115 bronze badges
asked Nov 18, 2016 at 14:24
NoobProgrammerNoobProgrammer
1911 gold badge2 silver badges11 bronze badges
Tested on Excel 2010
Sub Test()
ActiveWindow.WindowState = xlMinimized
UserForm1.Show
End Sub
This will minimize the all the workbooks in Excel but will keep the ribbon and any userforms visible, if you dont have Application.ScreenUpdating = False
then people will be able to see the workbooks in the bottom left of Excel.
If you want to just minimize a single workbook you can use the code below
Credit to this answer on SO for the minimizing specific workbooks
Sub test()
Dim wbName As Window
Set wbName = ActiveWorkbook.Windows(1)'You can use Windows("[Workbook Name]") as well
wbName.Visible = False
wbName.Visible = True
End Sub
Let me know if you need anything clarified
answered Nov 18, 2016 at 15:07
4
{quote}{login=}{date=12.02.2011 10:46}{thema=Re: }{post}{quote}{login=The_Prist}{date=09.02.2011 10:48}{thema=}{post}Так GetObject и есть решение….
GetObject(«C:Test.xls»)
откроет книгу Test.xls в невидимом режиме. Т.е. видно её не будет.
Еще для скрытия книги с глаз можно использовать:
ThisWorkbook.Windows(1).Visible = False{/post}{/quote}
Пробовал прописывать ThisWorkbook.Windows(1).Visible = False в коде рабочей книги.
выбивает мне ошибку.после закрытия файла уничтожаются листы книги.
попробую описать задачу подробнее.
моя работа предполагает постоянное обращение к разным книгам екселя. то есть в течении рабочего дня в процессах может исеть до 5 разных кних,с которыми оператор все время работает.
книга,на которую я пишу макрос представляет собой 4 листа с разными данными, у которых есть свой срок действия и которые удаляются при открытии файла автоматически,если теряют актуальность (этот код прописан в «Эта книга».
User form представляет собой форму поиска по одному из критериев, в результате поиска я имею возможность открыть по гиперссылке файл связанный с этим данным.
для удобства работы,я сделал,чтобы эта форма сворачивалась в панель задач
суть задачи заключается в том,чтобы эта форма работала только с данной книгой (назовем ее database.xls),при этом,чтобы книга была невидимой.
то есть в итоге мне нужно получить якобы просто приложение ВБА,которое работает с одной конкретной книгой,не смотря на то,что развернутой может быть и другая книга
к сожалению,на работе установлен определенный пакет программ,в который не входит MS visual studio, поэтому делается через ексель.{/post}{/quote}
интересно чем бы Вам помогла Visual studio / если конечно Вы сами приложение не напишите.
как мне кажется при открытии любого файла excel ваша книга станет видимой, если конечно вы не будете ее «глушить» как нибудь