使用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的任务栏上创建图标的方法?
如果我不对,我怎么能做到这一点?
答案 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
在“提交按钮”子项中,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进行非常有用的调整。