【问题标题】:Can't close userform无法关闭用户窗体
【发布时间】:2015-05-06 00:27:48
【问题描述】:

让我设置环境。

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

我有一个包含 msflexgrid 的用户表单。此 flexgrid 显示客户列表和客户、销售人员、csr、mfg rep 和区域、分配。当您单击列时,假设在“区域”列下,另一个用户窗体打开以显示区域列表。然后单击您选择的区域,用户窗体消失,新区域取代旧区域。

这一切都很好,直到您单击您选择的区域,“区域”用户表单不会消失(它会闪烁)并且新区域不会转移基础用户表单。

我应该提到,当我单步执行代码时,它的效果很好。

我假设它与 flexgrid 有关,因为打开用户窗体的所有其他用户窗体(没有 flexgrids)都可以正常工作。

以下是一些代码示例:

** 来自 flexgrid 的单击事件,显示区域用户窗体和区域用户窗体关闭时新区域的分配。

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 用户表单

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 程序员,这让我很难过。

任何帮助将不胜感激。

【问题讨论】:

    标签: excel vba userform msflexgrid


    【解决方案1】:

    我不会说你的做法是错误的(因为它永远不会起作用),但它吓坏了我。这不是我处理表单的方式。

    首先,您使用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 方法中分配给表单的隐式创建实例。你也不应该那样做。我很惊讶它甚至可以编译。

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

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2012-01-14
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多