首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VBA application.visible立即设置为True

Excel VBA application.visible立即设置为True
EN

Stack Overflow用户
提问于 2019-03-22 14:45:20
回答 4查看 2.8K关注 0票数 2

我已经设置了一个新的、空的、无模式的用户表单,用最少的代码来解决我的问题。

当打开工作簿时,将执行以下代码以隐藏Excel并显示用户表单。这是工作簿的唯一代码。

代码语言:javascript
运行
复制
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

我有一个只有一个按钮的空用户表单。此用户表单的唯一代码是:

代码语言:javascript
运行
复制
Private Sub CommandButton1_Click()
    Application.Windows("test.xlsm").Visible = True
    Application.Visible = True
Unload Me
End Sub

最后一件事是第一个工作表上的一个按钮,以启动与打开工作簿时相同的进程。其代码:

代码语言:javascript
运行
复制
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

现在我的问题是:当我打开工作簿时,就会出现userform,但excel和active窗口也会显示出来。但是,如果我单击工作表、Excel或窗口上的按钮,它们就会被隐藏。而且,Excel,而不是userform,在加载所有内容后都具有焦点。

我第一次做这个的时候,效果很好。我怀疑在编辑器中更改ShowModal设置以某种方式搞砸了,但这只是我的猜测。无论如何,它不再像预期的那样工作了,不管现在的模态设置。

如果我只是跑

代码语言:javascript
运行
复制
Application.Visible = False

与"if"-clause不同,Excel仍然是可见的,当然,活动窗口也是如此。

快把我逼疯了。我遗漏了什么?

编辑:链接到我的测试文件:我的Dropbox上的测试文件可能必须启动两次,因为当宏在启动时被阻塞,并且只有在excel完全加载之后才激活时,代码按预期工作。

编辑:我能够测试这个在excel 2010个人电脑和那里不存在的问题。因此,这可能与较新的Office应用程序处理东西的方式有关。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-02 12:15:03

我发现自己也有同样的问题--用Workbook_Open()事件打开的无模式表单,也应该隐藏excel应用程序(工作在Excel2016,32位)。

它使用UserForm property ShowModal设置为True的原因是:执行被暂停-它正在等待用户与所显示的UserForm交互。

如果我们将ShowModal更改为False (或调用UserForm.Show vbModeless),则不会暂停执行,一旦到达Workbook_Open()End Sub,Excel似乎就会自行设置Application.Visible = True

到目前为止,我找到的唯一解决方案是这一个 --基本上是通过添加一个无限循环来挂起执行,因此Excel只有在摆脱(卸载/隐藏)之前显示的表单后才能结束此事件。

我的版本是这样的:

代码语言:javascript
运行
复制
Private Sub Workbook_Open()
    Dim App As Object
    Set App = startMenu

    App.Show vbModeless

    While App.Visible
        DoEvents
    Wend
End Sub

然后,为了确保一旦关闭了非模态UserForm,就关闭了Excel,我添加了以下内容:

代码语言:javascript
运行
复制
Private Sub UserForm_Terminate()
    CloseApp
End Sub

Public Sub CloseApp()
    ThisWorkbook.Saved = True

    If Not OtherWorkbooksOpen Then
        Application.Quit
    Else
        ThisWorkbook.Close
    End If
End Sub

Public Function OtherWorkbooksOpen()
    If Application.Workbooks.Count > 1 Then
        OtherWorkbooksOpen = True
    Else
        OtherWorkbooksOpen = False
    End If
End Function

编辑:

无无限环解 -Excel的计划隐藏:

代码语言:javascript
运行
复制
Private Sub Workbook_Open()
    Dim App As Object
    Set App = startMenu

    App.Show
    If Not OtherWorkbooksOpen Then
        Application.OnTime Now + TimeValue("00:00:01"), "HideExcel"
    End If
End Sub
票数 1
EN

Stack Overflow用户

发布于 2019-03-22 15:33:16

我认为在if语句执行之后需要调用userform1.show。

代码语言:javascript
运行
复制
 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
票数 0
EN

Stack Overflow用户

发布于 2019-03-23 11:30:03

没有答案,但我不能把这个作为评论。这对我有效-用户表单出现,应用程序是隐藏的。我使用"<>2“,因为我有一个个人工作簿。你能确认一下发生了什么吗?

代码语言:javascript
运行
复制
 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55302174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档