0

我有一个用户表单,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

不卸载用户表单。不是说加载为模态然后重新加载为非模态是要走的路,而是把它扔在那里。

4

0 回答 0