首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Active UserForm上的应用程序UserForm事件

Active UserForm上的应用程序UserForm事件
EN

Stack Overflow用户
提问于 2018-04-20 00:14:17
回答 1查看 234关注 0票数 0

我要试着总结一下。(Excel 2013)

我已经创建了一个Form+VBA项目,它在打开文件时执行以下操作:我检查它是否是唯一的工作簿,如果不是,我会提醒用户使用我创建的快捷方式打开它自己的实例上的文件。如果它是在它自己的实例,它启动一个表单,它使表单不可移动,它还取消了X按钮。几乎是一个“总是在此excel实例之上”的表单。

代码语言:javascript
复制
Private WithEvents App As Application
Private Sub Workbook_Open()
    Set Wb = ThisWorkbook
    If Application.Workbooks.Count > 1 Then
        MsgBox "Please use the shortcut to open this file"
        Application.DisplayAlerts = False
        Wb.Close False
    Else
        Set App = Application
        UserForm1.Show
    End If
End Sub

我添加了触发器/事件,当您在同一个实例上打开一个新工作簿或现有工作簿时,它会关闭它们,并在一个单独的实例上打开它们。同样,这是因为表单“总是在顶部”。

代码语言:javascript
复制
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
    Set cwb = ThisWorkbook
    If Wb.Name <> cwb.Name Then
        Dim exDir As String, opFile As Variant
        Application.DisplayAlerts = False
        Wb.Close False
        exDir = "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE"
        opFile = Shell("""" & exDir & """ /X", vbNormalFocus)
        Application.DisplayAlerts = True
    End If
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    Set cwb = ThisWorkbook
    If Wb.Name <> cwb.Name Then
        Dim fDir, exDir As String, opFile As Variant
        fDir = Wb.Path & "\" & Wb.Name
        Application.DisplayAlerts = False
        Wb.Close False
        exDir = "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE"
        opFile = Shell("""" & exDir & """ /X """ & fDir & """", vbNormalFocus)
        Application.DisplayAlerts = True
    End If
End Sub

它工作得很好,在某种程度上。

问题是:当UserForm关闭时,当您打开一个新工作簿或一个现有文件时,当UserForm处于活动状态时,这两个触发器/事件都可以正常工作。如果我尝试打开另一个excel文件,它将尝试在现有实例上打开该文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 15:48:25

嗯,在与它斗争了更多的时间后,我发现了问题。当表单处于活动状态并希望打开现有文件时,excel根本不允许新文件打开,因此它不会触发WorkbookOpen事件,因为表单是打开的。NewWorkbook事件工作正常,因为在excel试图打开NewWorkbook时触发。

修复这个问题的方法是使用UserForm1.Show命令vbModeless属性允许表单和之间的交互。这允许在打开UserForm时使用excel窗口。由于我使表单不可移动,不可关闭,我也调整了excel的大小与表单相同的大小,这对我来说是有效的。现在所有的事件都会触发,因为主Excel窗口可以完成所有操作,因此它也会触发WorkbookOpen事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49932030

复制
相关文章

相似问题

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