Userform激活首先启动它的工作表

时间:2015-02-21 12:38:44

标签: excel vba excel-vba userform

我有一个userform,只有很少的按钮可以运行不同的宏。在宏的执行结束时,它隐藏了用户。我已使用以下代码重新打开userform的关闭按钮:

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

hmm隐藏了用户。现在的挑战是假设有3个工作簿。

  1. 工作簿A:支持宏的工作簿,我在其中编写了用户表单和子例程的代码

  2. 工作簿B:我按下组合键的位置,这表示用户来自

  3. 工作簿C:我希望在同一用户的帮助下执行相同的宏

  4. 现在,当我按下组合键(同时激活Workbook C)时,它会激活其他工作簿(我从第一个用户启动用户),然后向用户显示。虽然当我按下user上的某个按钮时,它会运行相关的宏,但会激活首先启动表单的工作簿。

    我希望在按下此组合键的同时激活相同的工作簿以显示用户(因此它不会转到上一个工作簿)。请帮忙

    守则:

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

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

    这些程序位于代码模块中,并加载和隐藏用户(命名为MainMenu)

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

    这是我们单击userfrom上的按钮时运行的示例子例程,

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

    现在,一旦我在某些工作簿上运行宏(通过第一次调用userform并通过单击其上的按钮),就像我之前说过的那样,然后当我转到其他工作簿然后再次按下这个组合键,当我第一次使用这个东西时,它会带我回到第一个工作簿,当我按下突出显示按钮时,它突出显示我按下组合键的工作簿但最后不知道为什么第一个工作簿会自动变得激活。

    请参阅以下链接获取工作簿,请打开2-3个新工作簿,然后一起试用。

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

1 个答案:

答案 0 :(得分:0)

所有用户形式为对象。在每次运行时将它们分开以具有独立实例。 试试这个

Private Sub LoadMenu()

Dim frmTemp as MainMenu

Set frmTemp = New MainMenu

frmTemp.Show

Unload frmTemp

End Sub