为什么在从userform启动userform后,卸载第二个userform关闭两者?

时间:2014-04-22 23:42:50

标签: excel vba modal-dialog userform

工作表上的按钮启动一个用于打开用户窗体(例如,userform1)的宏。 Userform1是非模态加载的,以便用户使用userform1和工作表(即单击单元格)进行输入。 userform1上有一个按钮,当单击该按钮时,会打开另一个用户窗体(例如,userform2)。 Userform2是模态的。单击userform2上的Cancel按钮可以按原样卸载userform2;但是,由于某种原因,它还卸载了userform1,这是我不想要的。如果我使用userform1模态,那么卸载userform2不会卸载userform1;但是,用户不能再使用(即,点击)工作表中的单元格。我找不到任何能让我了解为什么卸载一个userform卸载两者的信息。

2 个答案:

答案 0 :(得分:0)

UserForm2.Show

a = 1'只需再执行一行代码

这样就可以了。至少这对我有同样的问题...

答案 1 :(得分:0)

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

我发现关闭VBA编辑器窗口后问题消失了。您确实必须关闭它,将窗口最小化是不够的。窗口是否在同一屏幕上打开也没关系。只有关闭它才对我有用。我发现,一旦卸载了 Form2 ,VBA编辑器就会显示 Form2 ,无论我使用的是哪个其他代码模块。

我的目的是在TestWorkbook.xlsm(下面的查看代码)中找出问题所在。我在 Form2.Show 之后尝试了 DoEvents 一行代码的建议,两者都很有帮助。在我的DevelopmentAddIn.xlam中,它们没有帮助,第一个窗体仍然关闭。因此问题仍然可能出在我的AddIn的更复杂的代码中。

但是就像我说的那样,尽管我仍然不明白为什么,但是关闭VBA编辑器窗口确实可以解决问题。

TestWorkbook.xslm (两个用户窗体 Form1 Form2 和代码模块 mLoad

mLoad:

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