[英]EXCEL VBA Showing a Userform from a Different Worksheet or Workbook
我已经在EXCEL 2016 PC版中开发了一个用户表单。 如果用户从与上次启动或显示相同的工作簿/工作表中启动用户窗体(通过我的外接程序添加到功能区的按钮),那么我希望该用户窗体记住上次使用时的所有用户设置。 因此,当用户完成特定用途时,我只是隐藏了表单。 到目前为止,效果很好。
但是,如果用户随后从不同的工作表或工作簿中显示用户表单,则EXCEL会“快照”回用户表单的原始工作簿/工作表。 在这种情况下,我希望用户窗体重置并出现在“新的”活动工作簿/工作表中。
我可以想象这样的伪代码:
Public wb0 As Workbook
Public ws0 As Worksheet
' IF the userform is being used for the 1st time
Public Sub UserForm_Initialize()
yada yada yada...
wb0 = current workbook
ws0 = current worksheet
End Sub
Private Sub UserForm_Activate()
If wb0 <> ActiveWorkbook OR ws0 <> ActiveWorkSheet Then
(**Force the userform to open in the current workbook/worksheet**)
Call Reset
wb0 = current workbook
ws0 = current worksheet
End If
End Sub
但是,我不确定如何:
1)测试当前活动的工作簿和工作表是否与上次使用的活动的工作簿和工作表相同。 我应该将wb0设置为ActiveWorkbook的Name属性吗?
wb0 = ActiveWorkbook.Name
然后测试将是:
If wb0 <> ActiveWorkbook.Name ...
2)另外,不确定如何强制用户表单在当前工作表中打开。
====
或者,也许最好是这样的:
Private Sub UserForm_Activate()
If wb0 <> ActiveWorkbook OR ws0 <> ActiveWorkSheet Then
Unload userform
Reload userform
End If
End Sub
这样,所有内容都会自动重置...
====
有人可以请教吗?
谢谢!!
担
我使用大型外接程序中的一些UserForms进行此操作。
想象一个名为F_UserForm的用户窗体。 调用它的精简模块如下所示:
Option Explicit
Dim gF_UserForm As F_UserForm
Sub CallUserForm()
If Not gF_UserForm Is Nothing Then
On Error Resume Next
If gF_UserForm.ActiveWkbk.FullName <> ActiveWorkbook.FullName Then
Unload gF_UserForm
Set gF_UserForm = Nothing
End If
End If
If gF_UserForm Is Nothing Then
Set gF_UserForm = New F_UserForm
End If
With gF_UserForm
Set .ActiveWkbk = ActiveWorkbook
.Show
End With
End Sub
简化的UserForm代码如下所示:
Option Explicit
Dim m_Wkbk As Workbook
Public Property Set ActiveWkbk(wkbk As Workbook)
Set m_Wkbk = wkbk
End Property
对于OP的情况,我的主例程可以替换为以下内容,并且我添加到上述用户窗体代码中的代码段无需更改,而应合并到Reg_Userform
。
Option Explicit
Dim gReg_Userform As Reg_Userform
Sub conRegBox(control As IRibbonControl)
If Not gReg_Userform Is Nothing Then
On Error Resume Next
If gReg_Userform.ActiveWkbk.FullName <> ActiveWorkbook.FullName Then
Unload gReg_Userform
Set gReg_Userform = Nothing
End If
End If
If gReg_Userform Is Nothing Then
Set gReg_Userform = New Reg_Userform
End If
With gReg_Userform
Set .ActiveWkbk = ActiveWorkbook
.Show
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.