2013-08-16 4 views
3

В настоящее время у меня есть пользовательская форма, открытая поверх экземпляра excel, и она настроена так, что вы не можете взаимодействовать ни с чем, кроме пользовательской формы. Так как нет возможности свести к минимуму эту программу, я создал кнопку «Свернуть» в пользовательской форме, которая при щелчке скрывает пользовательскую форму и сжимает окно excel, как ожидалось.Excel Window & UserForm Минимизировать и максимизировать функции

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

Есть ли какая-либо функция или триггер, который я могу прослушивать, что позволит мне снова показать мою пользовательскую форму, когда экземпляр excel будет нажат и восстановлен? Это, как я в настоящее время минимизируя все:

Private Sub CommandButton15_Click() 
Me.Hide 
Application.WindowState = xlMinimized 
End Sub 
+0

Какую версию Excel вы используете? –

+0

Я использую Excel 2010 – Glynbeard

ответ

5

При отображении формы, вы, вероятно, делать что-то вроде:

UserForm.Show

Метод Show принимает необязательный аргумент, следует ли отображать формы Modal или Modeless. Модальное отображение по умолчанию и не позволяет взаимодействовать с объектами рабочей книги/рабочей книги. Вместо этого, при отображении формы, сделайте следующее:

UserForm.Show vbModeless

Это позволит пользователю взаимодействовать с рабочим листом/книгой, которая устраняет необходимость для пользовательской кнопки и вам не нужно будет делать Me.Hide. Минимизация приложения минимизирует UserForm. Максимизация приложения приведет к повторному отображению рабочей книги и пользовательской формы.

Если вы должны использовать дисплей UserForm vbModal (и во многих приложениях это преднамеренное требование запретить пользователю взаимодействовать с рабочей книгой/рабочими листами), сообщите мне. Могут быть некоторые события или события приложения, которые могли бы лучше уловить минимизацию/максимизацию.

UPDATE

В качестве альтернативы, вы можете сделать что-то вроде этого. Этот подход скрывает приложение Excel и уменьшает размер UserForm, а затем изменяет его размер при нажатии на пользовательскую форму и снова показывает приложение Excel.

Private Sub CommandButton15_Click() 
'Hide Excel and minimize the UserForm 
    Application.Visible = False 
    Me.Height = 10 
    Me.Width = 10 

End Sub 

Private Sub UserForm_Click() 
'Show Excel and resize the UserForm 
    Application.Visible = True 
    Me.Height = 180 
    Me.Width = 240 
End Sub 

Private Sub UserForm_Terminate() 
'Ensure that the Application is visible and the form resized 
    UserForm_Click 
End Sub 
+0

Да, я не хочу, чтобы пользователь мог взаимодействовать с фактическими листами Excel и т. Д., Если это возможно. Сохранение vbModal было бы идеальным. – Glynbeard

+0

Похоже, что он должен делать то, что вы хотите, http://social.msdn.microsoft.com/Forums/office/en-US/94dbe32c-d0b2-4875-b098-f27aabd2b1ae/excel-deactivate-event, но в идеале этого типа вещей обычно избегают. Обычно это не так, чтобы минимизировать приложение, и эти вызовы WinAPI сложны в работе. В Excel нет родного события, которое ловушки приложения минимизирует/максимизирует. –

+0

У меня есть альтернативная идея, которая может работать. Я уточню свой ответ. –