Код будет размещаться в нескольких разных местах: объект «ThisWorkbook» и код «UserForm».
«ThisWorkbook» содержит код, который определяет, является ли пользовательская форма единственной открытой вещью (рабочей книгой) Excel, иесли это так, то приложение Excel будет скрыто и сама книга будет скрыта.и если открыты другие рабочие книги, они просто скрывают рабочую книгу.У меня установлено, чтобы скрыть приложение и рабочую книгу в обоих случаях, чтобы новый экземпляр Excel можно было открывать после запуска пользовательской формы, не вытягивая рабочую книгу, связанную с пользовательской формой.Код для этого ниже (входит в объект "ThisWorkbook"):
Private Sub WorkBook_Open()
Dim wb As Workbook
Set wb = Workbooks("MyBook.xlsm")
If Workbooks.Count > 1 Then
wb.Windows(1).Visible = False
Else
wb.Windows(1).Visible = False
Application.Visible = False
End If
UserForm1.Show vbModeless
'Put defaults and populations here
End Sub
UserForm1.Show vbModeless
позволяет использовать Excel, когда активна пользовательская форма.Пара замечаний по этому разделу:
- "UserForm1" - это имя моей пользовательской формы, замените его на имя вашего
- Где я
Set wb = Workbooks("")
изменяю внутри кавычек наимя рабочей книги, в которой находится пользовательская форма - Оператор
IfElse
может быть удален и перемещен в If
, если вам не нужны никакие другие действия при открытии, когда другие рабочие книги не открыты
Следующий раздел кода входит в код пользовательской формы.У меня есть кнопка, настроенная для отображения книги Excel с целью ее редактирования, и вообще, у вас может быть регион, на который вы нажимаете, если не хотите, чтобы кнопка отображалась.Когда вы хотите активировать лист Excel и приложение необходимо будет активировать.Я выгружаю (деактивирую) активную вещь (пользовательскую форму).Этот фрагмент кода не требуется, если пользователю не нужен доступ к электронной таблице:
Private Sub See_Excel_Click()
Dim wb As Workbook
Set wb = Workbooks("MyBook.xlsm")
wb.Windows(1).Visible = True
Application.Visible = True
wb.Sheets("Sheet1").Activate
Unload Me
End Sub
В пользовательской форме должен быть способ обработки того, что происходит, когда пользовательская форма закрыта, как в ExcelПриложение и рабочая тетрадь останутся открытыми в фоновом режиме.У меня есть действие закрыть книгу и приложение.Быстрое примечание: если вы установите Cancel = True
, тогда красная кнопка x не закроет пользовательскую форму.Код, который я использую для этого:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = False
Dim wb As Workbook
Set wb = Workbooks("MyBook.xlsm")
wb.Windows(1).Visible = True
Application.Visible = True
ThisWorkbook.Saved = True
ThisWorkbook.Activate
If Workbooks.Count > 1 Then
ActiveWorkbook.Close
Else
Application.Quit
End If
End If
End Sub
Это код, который идет внутри пользовательской формы.И код, необходимый для того, чтобы пользовательская форма в VBA действовала как свое собственное приложение, позволяя Excel работать нормально одновременно с пользовательской формой.
Подводя итог, что происходит:
- Когда книга запускается, книга скрывается, а если не открыта другая книга, приложение Excel скрывается.
- Пользовательская форма запускается, чтобы разрешить одновременное использование Excel
- Когда электронная таблица активируется снова, Excel снова включается, и приложение и скрывает лист
- Когда пользовательформа закрыта, рабочая книга закрыта, и если нет других рабочих книг, приложение Excel закрывается
- Если вы задаете значения по умолчанию или заполняете ComboBox, поместите их в объектный код «Рабочая книга».