在应用程序隐藏的任务栏上显示Word用户窗体

时间:2018-04-30 06:31:06

标签: vba ms-word word-vba userform

使用MS Word文档,我正在为员工使用UserForm来完成评估。本文档将在不同时间由众多用户(200+)完成。

我的表单和文档运行良好但是我正在尝试操作隐藏文档但是保持UserForm显示以减少混乱并避免文档在UserForm处于焦点时屏蔽其他应用程序。

当工作人员打开Word文档时,UserForm会自动打开:

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(或UserForm)之外我正在为我工​​作,我预计这是一个问题,因为每个用户都会打开其他几个应用程序并且很可能会有一些'丢失'UserForm。

我尝试使用ActiveDocument.WindowState = wdWindowStateMinimize,但由于未隐藏单词,因此当UserForm处于活动状态时会导致文档聚焦,这可能会掩盖正在使用的其他应用程序并导致糟糕的用户体验。

除了找到WindowState方法之外,我还没有发现任何其他方法来实现我所追求的目标,也没有找到为UserForm创建任务栏按钮/图标的方法(虽然有很多关于Excel的信息)。

我是否正确说:没有办法 UserForm节目,并且任务栏上仍然有一个按钮/图标 - OR - 没有在UserForm的任务栏上创建图标的方法?

如果我不对,我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

作为一项工作,我只是顿悟了!

而不是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用于终止用户窗体。

要在UserForm关闭时恢复窗口大小(我选择最大化):

Private Sub UserForm_Terminate()

Application.WindowState = wdWindowStateMaximize

End Sub

由于这并没有具体回答我提出的问题,我并没有将此标记为已接受的答案,因为我迟早会假设某人能够直接回答我的问题。

答案 1 :(得分:0)

在对Windows API函数进行一些自我教育之后,我仍然知道基本上什么都没有,但我理解足以自信地测试excel解决方案,结果发现(至少我是测试)它有效!

我不是盲目接受别人代码而不至少理解语法/逻辑的最大粉丝。

我专门测试了Gareth's Answer中提供的代码,该代码在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的编程访问

Chip Pearson在Extending The Capabilities Of VBA UserForms With Windows API Functions上发布了一个很棒的内容,其中包含了一些额外的调整,包括显示最小化和最大化按钮,其中包含上述参考答案将对UserForm进行非常有用的调整。