用户表单激活首先启动的表单

我有一个用户窗体,几个button用于运行不同的macros。 在macros的执行结束时,它隐藏了userfrom。 我用下面的代码重新生成了用户窗体的closuresbutton:

Private Sub UserForm_QueryClose _ (Cancel As Integer, CloseMode As Integer) ' Prevents use of the Close button If CloseMode = vbFormControlMenu Then hmm Cancel = True End If End Sub 

嗯隐藏userfrom。 现在的挑战是假设有3个工作簿。

  1. 工作簿A:macros已启用的工作簿,其中我编写了用于userform和子例程的代码

  2. 工作簿B:在哪里按下组合键,并显示userfrom

  3. 工作簿C:我想在同一个userfrom的帮助下执行相同的macros

现在当我按下组合键(而工作簿C被激活)时,它将激活其他工作簿(我从第一个用户开始的那个工作簿),然后显示userfrom。 虽然当我按下userfrom上的某个button时,它会运行相关的macros,但会激活首先启动表单的工作簿。

我想保持相同的工作簿激活,这个组合键被按下来显示userfrom(所以它不去以前的工作簿)。 请帮忙

代码:

这是关键的组合,并已保存在Microsoft Excel对象的ThisWorkbook中

 Private Sub Workbook_Open() Application.OnKey "%{s}", "LoadMenu" End Sub 

这些过程在代码模块中,加载并隐藏userfrom(命名为MainMenu)

 Private Sub LoadMenu() MainMenu.Show End Sub Sub hideMenu() MainMenu.Hide End Sub 

这是一个例子子程序,当我们点击userfrom上的一个button时,

 Sub highlightYellow() selection.Interior.Color = vbYellow hideMenu ' This hides menu after the execution End Sub 

现在,我已经在第一次运行一些工作簿(通过第一次调用用户表单,通过点击一个button)上的macros,就像我之前说的,然后当我去其他工作簿,然后再次按下这个键当我第一次使用这个东西的时候,当我按下突出显示button时,它突出显示了我按下组合键的工作簿,但是最后不知道为什么第一个工作簿自动激活。

请参阅下面的工作簿链接,请打开2-3个新的工作簿,然后一起尝试。

https://www.dropbox.com/s/952lrsrsglt9f6y/Test%20Book.xlsm?dl=0

所有的用户forms作为对象。 在每次运行中将它们分开以拥有独立的实例。 尝试这个

Private Sub LoadMenu()

Dim frmTemp as MainMenu

Set frmTemp = New MainMenu

frmTemp.Show

Unload frmTemp

End Sub