【问题标题】:Userform activating the sheet where it was initiated first用户表单激活它首先启动的工作表
【发布时间】:2015-02-21 12:38:43
【问题描述】:

我有一个用户窗体,其中有几个按钮可以运行不同的宏。在宏执行结束时,它会隐藏用户。我已经使用以下代码重新设置了用户窗体的关闭按钮:

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:在我按下组合键的地方,这显示了 userfrom

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

现在,当我按下组合键(激活 Workbook C 时)时,它会激活其他工作簿(我首先启动 userfrom 的那个),然后显示 userfrom。虽然当我按下 userfrom 上的某个按钮时,它会运行相关的宏,但会激活首先启动表单的工作簿。

我想在按下此组合键以显示用户来源的位置保持同一个工作簿处于激活状态(因此它不会转到上一个工作簿)。请帮忙

代码:

这是组合键,已保存在 Microsoft Excel Objects 的 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

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

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

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

【问题讨论】:

  • 要回答这个问题,最好有按快捷键运行的代码。
  • 这是它在我的电脑上的工作方式:link

标签: vba excel userform


【解决方案1】:

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

Private Sub LoadMenu()

Dim frmTemp as MainMenu

Set frmTemp = New MainMenu

frmTemp.Show

Unload frmTemp

End Sub

【讨论】:

  • 嗨,试过了。这每次都会创建一个新用户,所以如果我添加文本框并且有人填写了一些数据,一旦我们再次按下组合键,它就会自动删除。
  • 是的,因为现在每次运行都会调用一个新的用户表单实例,它不会保存任何数据。如果您需要保存和重新加载任何旧数据,您可以将其存储在某个位置并将其加载到您的表单中。我的建议是使用SaveSettingGetSetting
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多