为什么从用户表单启动用户表单后,卸载第二个用户表单会关闭两者



工作表上的一个按钮启动一个宏,打开一个用户表单(比如userform1)。加载Userform1是非模态的,以便用户使用Userform1和工作表(即单击单元格)进行输入。userform1上有一个按钮,单击后会打开另一个userform(比如userform2)。Userform2是模态的。单击userform2上的"取消"按钮将卸载userform2;然而,出于某种原因,它也卸载了我不想要的userform1。如果我将userform1设置为模态,则卸载userform2不会卸载userform1;但是,用户不能再使用(即单击)工作表中的单元格。我找不到任何信息可以告诉我为什么卸载一个用户表单会同时卸载两个用户表单。

我很高兴刚刚偶然发现了这个旧线程。

我发现,当VBA编辑器窗口关闭时,问题就消失了。你真的必须关闭它,最小化窗口是不够的。窗口是否在同一屏幕上打开也无关紧要。只有关闭它才对我有用。我发现,只要Form2被卸载,VBA编辑器就会显示Form2

我的目标是在TestWorkbook.xlsm中隔离这个问题(查看下面的代码)。我尝试了DoEventsForm2.Show之后的一行代码的建议,两者都有所帮助。在我的DevelopmentAddIn.xlam中,他们没有帮助,第一个表单仍然关闭。因此,问题可能仍然存在于我的AddIn中更复杂的代码中。

但是,正如我所说,关闭VBA编辑器窗口会起作用,尽管我仍然不明白为什么。

TestWorkbook.xslm(两个用户表单Form1Form2以及一个代码模块mLoad

mL加载:

Option Explicit
Public Changed As Integer
'***Load the 1st form
Public Sub LoadFirstForm()
    Load Form1
    'allow user to change the active workbook
    Form1.Show vbModeless
End Sub
'***Load a 2nd form (from Form1)
Public Sub LoadSecondForm()
    Dim a  As Integer
    Load Form2
    'continue after 2nd form closes
    Form2.Show vbModal
    'suggestions
    a = 1
    DoEvents
    '2nd form was changed
    If Changed = 1 Then
        Form1.InfoBox.Value = "Changed"
        'process changes
    '2nd form is unchanged
    Else
        Form1.InfoBox.Value = "Unchanged"
    End If
End Sub

Form1(带有按钮cmdLoad和文本框InfoBox

'***Load the 2nd form (from Form1)
Private Sub cmdLoad_Click()
    LoadSecondForm
End Sub

Form2:(带按钮cmdOK

Option Explicit
'***Initial status is 'unchanged'
Private Sub UserForm_Initialize()
    Changed = 0
End Sub
'***Status is 'changed'
Private Sub cmdOk_Click()
    Changed = 1
    'close 2nd form and continue
    Unload Me
End Sub

UserForm2.显示

a=1'任何代码中只有1行执行

这就行了。至少这对我来说对同样的问题有效。。。

相关内容

最新更新