Excel VBA application.visible 立即设置回 True

2024-05-06

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

当工作簿打开时,执行以下代码来隐藏 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”子句,当然活动窗口也是可见的。

这让我抓狂。 我缺少什么?

编辑:链接到我的测试文件:我的 Dropbox 上的测试文件 https://www.dropbox.com/s/2jz52956valr0yi/test.xlsm?dl=0可能需要启动两次,因为当宏在启动时被阻止并且仅在 Excel 完全加载后才激活时,代码将按预期工作。

编辑:我能够在 Excel 2010 电脑上对此进行测试,并且问题不存在。因此,这可能与较新的 Office 应用程序处理内容的方式有关。


我发现自己遇到了完全相同的问题 - 用以下命令打开的无模式表单Workbook_Open()事件也应该隐藏 Excel 应用程序(适用于 Excel 2016,32 位)。

与它合作的原因UserForm财产显示模态 set to True是因为:执行被暂停 - 它正在等待用户与显示的用户窗体进行交互。 https://stackoverflow.com/a/1784410

如果我们改变显示模态 to False(或致电UserForm.Show vbModeless)那么执行就永远不会暂停,一旦我们到达End Sub of our Workbook_Open(), Excel 似乎设置Application.Visible = True在其自己的。

到目前为止我找到的唯一解决方案是this one https://stackoverflow.com/a/43765665- 基本上是你suspend通过添加无限循环来执行,以便 Excel 仅在您摆脱(卸载/隐藏)先前显示的表单后才结束此事件。

我的版本如下所示:

Private Sub Workbook_Open()
    Dim App As Object
    Set App = startMenu

    App.Show vbModeless

    While App.Visible
        DoEvents
    Wend
End Sub

然后只是为了确保 Excel 在无模式后关闭UserForm已关闭我添加了以下内容:

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

EDIT:

没有无限循环的解决方案 https://stackoverflow.com/a/25040582- Excel 的时间表隐藏:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel VBA application.visible 立即设置回 True 的相关文章

  • 粘贴数据后取消选择列

    这可能很简单 但我无法解决它 我可以使用以下命令释放复制数据的列Application CutCopyMode False但粘贴数据的列仍然保持选中状态 我尝试过ActiveSheet EnableSelection xlNone正如论坛之
  • 从 excel/vba 生成电子邮件到 Outlook 时,我的电子邮件签名不会出现?

    您好 我使用 Ron De Bruin 的精彩网站创建了 VBA 代码 该代码可以从 Excel 文件生成向特定用户发送的电子邮件 唯一的问题是我的签名没有出现在每封电子邮件上 而且我似乎找不到如何在代码中添加它 有人可以建议吗 正如你所知
  • ReDim 保留“下标超出范围”

    我正在尝试将数据从 2 个双精度数组移动到 2 个不同的双精度数组 我不确定大小是多少 因为我正在从第一个数组中随机抽取样本并将其放入第二个数组中 当我添加 ReDim Preserve 行时 出现下标超出范围错误 Function Cre
  • xlrd 读取 xls XLRDError:不支持的格式或损坏的文件:预期的 BOF 记录;找到“\r\n”

    这是代码 xls open workbook data xls 作为回报 File home woles P2 fin fin apps data container importer py line 16 in import data x
  • 在 Nodejs/javascript 中的 Excel 中创建动态数量的列或标题

    我用过exceljsNodejs中用于将json数据导出到excel的模块 它工作正常 但必须在添加行之前预定义标题 列的名称 即列是固定的 添加行后 我无法动态添加列 我尝试了许多通过 npm 提供的模块 但它们都具有相同的功能 那么 有
  • 调用 UDF 时公式中使用的值的数据类型错误

    我一直在努力找出这里出了什么问题 我有两个包含字符串值的列 我使用第三列调用工作表中的 UDF 但最终得到 Value 并出现错误 公式中使用的值的数据类型错误 Eg Col I Col J File1 Y File1 N File2 Y
  • VBA - 使用字符串串联调用子例程

    是否可以使用字符串串联来调用 VBA 中的子例程 例如 Sub Call This 2019 do something end sub Sub From this Call Call This str 2019 Sub 我使用这种方法没有任
  • 使用 VBA 将数据从 Excel 导出到现有 PowerPoint 幻灯片

    我正在编写一个小型 excel 插件来进行一些简单的数据分析 但不幸的是我不是 VBA 程序员 到目前为止我已经做了什么 从巨大的 Excel 工作簿中获取数据并执行计算 将结果写入预先格式化的 Excel 骨架 文件 我接下来想要做什么
  • vba - 扫描文档中的宏并替换宏文本?

    我面临一个谜题 我工作的地方有大量的 Word 模板 它们都包含一个包含一些错误的自动新建事件句柄 这个错误存在于所有模板中 我想知道是否有一种方法可以扫描包含此宏的模板的目录并稍微更改宏代码 这可能吗 是的 你可以这么做 您可以使用以下方
  • 如何从Excel调用VBA函数

    我有一个 excel 文件 我必须在其中放置验证规则 我有一个单元格表示 客户时间 用户可以在其中输入时间 但它是自定义时间 用户可以这样输入时间 23 45 98 20 100 30 用户不能输入字符串 并且不能输入除冒号之外的特殊字符
  • Python:使用Excel CSV文件仅读取某些列和行

    虽然我可以读取 csv 文件而不是读取整个文件 但如何仅打印某些行和列 想象一下这是 Excel A B C D E State Heart Disease Rate Stroke Death Rate HIV Diagnosis Rate
  • 雅虎财经历史股价动力查询返回301响应

    直到今天我的 Excel 2016 power query 都能够从以下 URL 获取历史股票定价数据https finance yahoo com quote AAL history p AAL https finance yahoo c
  • 使用VBA删除Excel中的非重复数据

    我尝试删除非重复数据并保留重复数据 我已经完成了一些编码 但什么也没发生 哦 这是错误 哈哈 这是我的代码 Sub mukjizat2 Dim desc As String Dim sapnbr As Variant Dim shortDe
  • 当应用程序继续运行时,如何清理 .NET 中的 COM 引用?

    我正在开发一个 NET 程序 该程序启动 Excel 的新实例 执行一些工作 然后结束 但必须让 Excel 保持运行 稍后 当程序再次运行时 它将尝试挂钩到前一个实例 在这种情况下处理 COM 对象释放的最佳方法是什么 如果我第一次没有对
  • Excel宏-将逗号分隔的条目拆分为新行[重复]

    这个问题在这里已经有答案了 我目前在一张纸上有这些数据 Col A Col B Col C 1 A angry birds gaming 2 B nirvana rock band 我想要做的是将第三列中的逗号分隔条目拆分并插入新行 如下所
  • 在 Android 上使用 Excel 文件

    我正在开发一个应该能够创建 读取和写入 Excel 文件的模块 是否有 推荐 轻量级 Java 库用于处理可以在 Android 上运行的 Excel 文件 欢迎提出建议 Thanks 找到一个
  • 删除 Excel 表格中的所有数据行(第一行除外)

    就在最近 我一直在尝试删除表中的所有数据行 除了第一个数据行 需要清除 一些正在执行的表可能已经没有行 所以我运行它时遇到问题 因为使用 DataBodyRange Rows Count在没有行 只有页眉和 或页脚 的表上会导致错误 我到处
  • 使用 UiPath 循环 Excel 文件中的 URL

    我尝试了几种方法 但不知怎的 它们看起来不干净 我有一个 Excel 格式的 URL 文件 一列中有 400 多个 URL 我希望 UiPath 从该文件中读取并一一浏览这些 URL 我尝试让 导航到 从从 Excel 读取的变量中读取 但
  • 如何通过VBA代码修复仅在Excel共享模式下发生的运行时错误400

    我真的不知道400错误是什么原因造成的 下面的代码在正常模式下运行得很好 但是一旦我在共享模式下启用 Excel 并尝试使用用户表单 它就会给我 VBA 400 我在这里尝试做的是在向用户显示用户表单后更改形状的文本并禁用其 OnActio
  • 我可以使用 VBA 将密码“传递”到 Excel 中的外部数据库连接吗?

    我正在尝试使用 VBA 隐藏我在 Excel 工作表中设置的数据连接的密码 由于 Excel 以纯文本形式存储外部数据源的密码 因此我想让 VBA 调用表的刷新并提供密码 我录制了刷新表格并输入密码的宏 但令我沮丧的是 它似乎省略了密码部分

随机推荐