【问题标题】:Prevent UserForm from being visible when called from another macro in VBA从 VBA 中的另一个宏调用时防止用户窗体可见
【发布时间】:2017-08-13 11:48:32
【问题描述】:

我正在从一个工作簿(即 wb1.xlsm)运行一个宏,它将模板工作簿复制到另一个位置并重命名它(即 wb2.xlsm)。然后它使用 Application.Run 运行位于 wb2 中的 AutoSetup() Sub。这会根据给定的参数创建适当的工作表。

我的问题发生在这个过程中。它是使用 UserForm 中出现的现有功能设置的。

当我运行宏时,我不想看到任何弹出,但即使 Application.Events 和 Application.Visible 设置为 False 执行设置计算的用户窗体仍然会弹出并且可见。

有什么建议吗?

代码如下:

'AutoSetup Module
Public Sub AutoSetup(Project As String, Program As String, TestName As String, _
                     TestType As String, TaskNumber As String, Token As String)
    Dim TokenArr() As String

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Set IntSht = ActiveWorkbook.Sheets("Integrations")
    Set DctSht = ActiveWorkbook.Sheets("Duct")
    IntSht.Range("B4").value = Program
    IntSht.Range("B5").value = TestName
    IntSht.Range("E4").value = Project
    IntSht.Range("E5").value = TaskNumber
    Call WorkbookSetup
    MenuForm.TestSetBox.value = TestType
    TokenArr = Split(Base64DecodeString(Token), ",")
    EPFLogin.TextBox1.value = TokenArr(0)
    EPFLogin.TextBox2.value = TokenArr(1)
    MenuForm.LoadSheets (True)
    DctSht.Activate
    ThisWorkbook.Save
    ThisWorkbook.Close
End Sub

【问题讨论】:

  • 为什么会有用户表单?它是否允许在计算中进行一些更改?您能否发布您的 AutoSetup() 代码,以便我们了解发生了什么?
  • 您是否有权(在技术上和在您的组织中)更新模板?
  • 用户表单 (MenuForm) 用于手动设置。本质上,我通过发送用户将输入的参数然后模拟点击事件来自动化手动设置的过程。
  • 我理解,并且我假设您必须保留原始应用程序的功能以允许偶尔进行手动设置,但是您是否允许更改代码?
  • 是的,我有权利。

标签: vba excel userform


【解决方案1】:

wb2.xlsm 内,将计算移至单独模块中的单独Sub 例程。显示UserForm 后,从“AutoSetup”调用此子例程。

然后从wb1.xlsm,调用新的子程序。

【讨论】:

  • 我想在自动设置期间完全避免显示用户窗体。因此,您的建议是从模块而不是表单执行所有子例程。这是我的假设,但我希望不是这样。
  • @StevenGood 建议将执行计算的代码部分从用户窗体移到更合理的位置。然后用户窗体(当它显示时)可以调用这些计算(传递任何必要的参数),并且您的宏(无需不必显示用户窗体)也可以调用这些计算(传递任何必要的参数)。表单的代码最好只包含与表单本身相关的代码。
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多