Показать пользовательскую форму Word на панели задач со скрытым приложением - PullRequest
0 голосов
/ 30 апреля 2018

Используя документ MS Word, я использую пользовательскую форму для персонала, чтобы выполнить оценку. Этот документ будет заполнен многочисленными пользователями (более 200) в разное время.

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

Когда сотрудник открывает документ Word, автоматически открывается пользовательская форма:

Private Sub Document_Open()

Dim myForm As frmAssessment1
Set myForm = frmAssessment1

    myForm.Show (0)

End Sub

Когда открывается пользовательская форма:

Private Sub UserForm_Initialize()

'This defines tab 0 will display.
Me.MultiPage1.Value = 0

'This hides MS Word but remains open in the background.
Application.Visible = False

Dim question1 As String

'Populates the combobox for the Team Number selection_
' with an array (currently 1-30).
    cmbTeamNum.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)

'Assigns the text range of the defined bookmark ("x") to a variable
question1 = ActiveDocument.Bookmarks("question1").Range.Text

'Assigns each variable to the label caption field.
    With Selection
    lblQ1.Caption = question1
    End With

End Sub

Application.Visible = False работает для меня, кроме показа отсутствия Word (или пользовательской формы) на панели задач, что, как я ожидаю, будет проблемой, поскольку у каждого пользователя будет открыто несколько других приложений, и, вероятно, некоторые из них "потеряют" 'пользовательская форма.

Я пытался использовать ActiveDocument.WindowState = wdWindowStateMinimize, хотя, поскольку слово не скрыто, это приводит к тому, что документ оказывается в фокусе, когда активна пользовательская форма, что может маскировать другие используемые приложения и ухудшать работу пользователя.

Кроме поиска метода WindowState, я не обнаружил никаких других методов для достижения того, что мне нужно, и не нашел способа создать кнопку / значок на панели задач для пользовательской формы (хотя там много информации для Excel ).

Правильно ли я сказал: не существует способа только показывать пользовательскую форму и по-прежнему иметь кнопку / значок на панели задач - ИЛИ - нет способа создать значок на панели задач для пользовательской формы?

Если я не прав, как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

После некоторого самообучения по функциям Windows API я все еще ничего не знаю в основном , но я достаточно понимаю, чтобы быть уверенным в том, чтобы тестировать решения Excel, и получается, что (по крайней мере, тот, который я тестировал ) это работает!

Я не самый большой поклонник слепого принятия чужого кода без хотя бы понимания синтаксиса / логики.

Я специально протестировал код, предоставленный в Ответ Гарета , который работал как в Word 2007, так и в Excel 2007 с минимальными изменениями. Я предполагаю, что это будет работать одинаково в приложениях Office 2010, что я и использую на работе.

Я настроил следующий раздел кода:

Private Sub UserForm_Activate()

Application.Visible = False
'Application.VBE.MainWindow.Visible = False
AppTasklist Me

End Sub

В частности, я закомментировал Application.VBE.MainWindow.Visible = False, так как эта строка включена в код, и она не будет компилироваться со следующей имеющейся ошибкой во время выполнения:

Excel

Ошибка времени выполнения «1004»:

Программный доступ к Visual Basic Project не является доверенным

Слово

Ошибка времени выполнения '6068':

Программный доступ к Visual Basic Project не является доверенным


Чип Пирсон опубликовал фантастическую статью о Расширение возможностей пользовательских форм VBA с помощью функций Windows API , которая охватывает довольно много дополнительных настроек, в том числе показ кнопок минимизации и максимизации, которые включены в приведенный выше ответ, сделает довольно полезная настройка для пользовательской формы.

0 голосов
/ 01 мая 2018

В качестве работы у меня только что было прозрение!

Вместо Applicaiton.Visible = False я использую Application.Resize.

 Private Sub UserForm_Initialize()

'Without this it would encounter errors here and there.
Application.WindowState = wdWindowStateNormal 

'When the userform is not in focus this allows you to still navigate back to the userform from the MS Word button on the TaskBar but only shows a very small title bar in the top right corner of the screen. 
Application.Resize 10, 10 

'This defines tab 0 will display.
Me.MultiPage1.Value = 0

'Some code does some things...
'
'
End Sub

Вот как выглядит изменение размера: Resized MS Word Title Bar

В подпункте «Кнопка отправки» Unload Me используется для завершения пользовательской формы.

И чтобы восстановить размер окна при закрытой пользовательской форме (я выбрал максимизацию):

Private Sub UserForm_Terminate()

Application.WindowState = wdWindowStateMaximize

End Sub

Поскольку это не дает конкретного ответа на мой вопрос, я не помечаю это как принятый ответ, так как предполагаю, что рано или поздно кто-то сможет напрямую ответить на мой вопрос.

...