无法关闭userform

时间:2010-01-06 17:02:26

标签: excel vba userform msflexgrid

让我建立环境。

这是在Excel中运行的VBA代码。

我有一个包含msflexgrid的userform。此flexgrid显示客户和客户,销售人员,csr,制造商代表和地区,分配的列表。当您单击某列时,让我们说在“区域”列下,将打开另一个用户窗体以显示“区域”列表。然后,您单击您选择的区域,用户窗体将消失,新的区域将取代旧区域。

这一切都很有效,直到您点击您所选择的区域,“Territory”用户形式不会消失(它闪烁)并且新区域不会传输基础用户形式。

我应该提一下,当我逐步完成代码时,效果很好。

我假设它与flexgrid有关,因为打开userform的所有其他userform(没有flexgreids)工作得很好。

以下是一些代码示例:

**来自flexgrid的Click事件,显示区域userform并在关闭domain userform时分配新区域。

Private Sub FlexGrid_Customers_Click()

With FlexGrid_Customers

    Select Case .Col
        Case 0
        Case 2
        Case 4
        Case 6
            UserForm_Territories.Show
        Case Else
    End Select

    If Len(Trim(Misc1)) > 0 Then
        .TextMatrix(.Row, .Col) = Trim(Misc1)
        .TextMatrix(.Row, .Col + 1) = Trim(Misc2)
    End If

End With

End Sub

**以下Subs用于Territory userform

Private Sub UserForm_Activate()

Misc1 = ""
Misc2 = ""

ListBox_Territory.Clear
Module_Get.Territories

End Sub

Private Sub UserForm_Terminate()

Set UserForm_Territories = Nothing

End Sub

Private Sub ListBox_Territory_Click()

With ListBox_Territory
    Misc1 = Trim(.List(.ListIndex, 0))
    Misc2 = Trim(.List(.ListIndex, 1))
End With

Hide
UserForm_Terminate

End Sub

我知道这是一个冗长的解释,但我是一个相当不错的VBA程序员,这让我很难过。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我不会说你做的是错的(因为它不会起作用),但它吓到了我。这不是我处理表格的方式。

首先,您使用UserForm_Territories(类/表单名称)来引用隐式创建的表单实例。这是我一直避免做的事情。我总是会明确地创建一个表单实例,而不是:

UserForm_Territories.Show

我愿意:

Dim oTerritoriesForm As UserForm_Territories
Set oTerritoriesForm = New UserForm_Territories

oTerritoriesForm.Show vbModal

' get the values from the form here

Unload oTerritoriesForm

接下来,更令人担忧的是,您通过显式调用它来破坏UserForm_Terminate行为。为什么你这样做我无法想象,除非你认为它可以解决你陈述的问题。我的建议:不要这样做。

更糟糕的是,您尝试在Terminate方法中分配隐式创建的表单实例。你也不应该这样做。我很惊讶甚至编译。

您似乎正在尝试强制隐式创建的表单实例来模仿显式创建的实例。在这种情况下,请明确创建它,如上所示。