我有一个用户表单,frmSort
它显示在运行我的主代码之前选择了哪一列。
为了frmSort
动态更新选择的列,以防从功能区打开时选择了错误的列frmSort
,我必须Worksheet_SelectionChange
在活动工作表模块中有一个代码。
由于Worksheet_SelectionChange
删除了撤消堆栈(至少我的),并且我有其他代码依赖于Application.Undo
,因此我已经在显示时将其插入Worksheet_SelectionChange
正确的工作表模块frmSort
中,并在Userform_Terminate
.
令我惊讶的是代码:在同一次运行期间
LineNum = .CreateEventProc("SelectionChange", "Worksheet")
以某种方式破坏了我的负载。frmSort.show vbModeless
首先它在添加代码后显示VBE-editor,即使没有打开VBE,这也不好。其次,它不显示用户表单。我的测试告诉我用户表单已加载,但未显示。在“程序添加”之后的同一运行中运行 ```frmSort.show vbModeless`` 不起作用。
我能够添加Worksheet_SelectionChange
并显示用户窗体modal,但不是无模式的。由于我希望能够更改主代码运行的列,并在用户窗体中显示更改,我相信无模式用户窗体是要走的路。
运行两次时它起作用的原因是我SelectionChangeOnOff
的子程序在插入之前检查程序是否存在。让我不得不按两次功能区按钮并关闭 VBE 才能继续......
关于如何进行的任何想法?
我想先将它作为模态打开,然后以无模式隐藏并重新打开,但是代码:
SelectionChangeOnOff ActiveSheet, True
frmSort.Show
Unload frmSort
不卸载用户表单。不是说加载为模态然后重新加载为非模态是要走的路,而是把它扔在那里。