我建立了一个新的,空的,无模式的用户窗体,以最少的代码来解决我的问题。
对于打开工作簿时,将执行以下代码以隐藏Excel并显示用户窗体。这是工作簿的唯一代码。
Private Sub Workbook_Open()
UserForm1.Show
If Application.Windows.Count <> 1 Then
Application.Windows("test.xlsm").Visible = False
Else
Application.Visible = False
End If
End Sub
我有一个只有一个按钮的空用户表单。此用户表单的唯一代码是:
Private Sub CommandButton1_Click()
Application.Windows("test.xlsm").Visible = True
Application.Visible = True
Unload Me
End Sub
最后一件事情是第一个工作表上的按钮,以启动与打开工作簿时相同的过程。其代码:
Sub Button1_Click()
UserForm1.Show
If Application.Windows.Count <> 1 Then
Application.Windows("test.xlsm").Visible = False
Else
Application.Visible = False
End If
End Sub
现在我的问题是: 当我打开工作簿时,会显示用户窗体,但是excel和活动窗口也保持可见。但是,如果我单击工作表上的按钮,Excel或窗口将被隐藏。此外,加载所有内容后,Excel(而不是用户窗体)将具有焦点。
我第一次运行此程序,效果很好。我怀疑在编辑器中更改ShowModal设置会以某种方式使它搞砸,但这只是我的猜测。无论如何,无论现在的模式设置如何,它都无法按预期工作。
如果我刚跑步
Application.Visible = False
Excel仍然保持可见状态,而不是“ if”子句,活动窗口当然也保持可见状态。
这真让我发疯。 我想念什么?
编辑:链接到我的测试文件:Test File on my Dropbox 可能必须启动两次,因为当宏在启动时被阻止并且仅在excel完全加载后才被激活时,代码才能按预期工作。
编辑:我能够在excel 2010电脑上对此进行测试,并且该问题不存在。因此,这可能与更新的Office Apps处理内容的方式有关。
答案 0 :(得分:0)
我认为在执行if语句后需要调用userform1.show。
Private Sub Workbook_Open()
If Application.Windows.Count <> 1 Then
Application.Windows("test.xlsm").Visible = False
Else
Application.Visible = False
End If
UserForm1.Show
End Sub
答案 1 :(得分:0)
不是答案,但是我不能发表评论。这对我有用-用户表单出现,应用程序被隐藏。我有个人工作簿,因此使用了“ <> 2”。你能确认会发生什么吗?
Private Sub Workbook_Open()
If Application.Windows.Count <> 2 Then
Application.Windows("test.xlsm").Visible = False
Else
Application.Visible = False
End If
UserForm1.Show False
End Sub
答案 2 :(得分:0)
我遇到了同样的问题,但是我注意到在excel文件之前加载了表单。因此,我将冗余形式称为application.visible = false。 基本上,在单击表单中的任何内容后,它将调用application.visible = false,并且excel窗口将隐藏。
答案 3 :(得分:0)
我发现自己也遇到了同样的问题-使用Workbook_Open()
事件打开的无模式表单也应该隐藏excel应用程序(在Excel 2016上运行,32位)。
使用 UserForm 属性 ShowModal 设置为 True 的原因是:the execution is suspended - it's waiting for user to interact with the UserForm that was shown.
如果我们将 ShowModal 更改为 False (或调用UserForm.Show vbModeless
),则执行将永远不会暂停,并且一旦我们到达{ {1}},Excel似乎自行设置了End Sub
。
到目前为止,我发现的唯一解决方案是this one-基本上,您通过添加无限循环来暂停执行,因此,一旦您摆脱(卸载/隐藏)以前显示的表格。
我的版本如下:
Workbook_Open()
然后只是要确保在关闭无模式 UserForm 后关闭Excel,我添加了以下内容:
Application.Visible = True
编辑:
Solution without infinite loop-计划隐藏Excel:
Private Sub Workbook_Open()
Dim App As Object
Set App = startMenu
App.Show vbModeless
While App.Visible
DoEvents
Wend
End Sub