无法closures用户窗体

让我设置环境。

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

我有一个包含msflexgrid的用户窗体。 这个flexgrid显示了客户和客户,销售人员,csr,制造商代表和领土,分配的列表。 当您点击一列时,让我们说在地域栏下,另一个用户窗体打开,显示一个地区列表。 然后,您点击您所select的区域,用户表单消失,新的区域代替旧的区域。

这一切都很好,直到你点击你所select的区域,“Territory”用户窗体不会消失(闪烁),新的区域不会传输底层的用户窗体。

我应该提到,当我逐步完成代码时,它的效果非常好。

我假设它有一些与FlexGrid做所有其他用户窗体(没有flexgrids)打开用户窗体工作就好了。

以下是一些代码示例:

**从flexgrid点击事件,显示领土用户窗体,并在领土用户窗体closures时分配新领域。

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 

**在地域用户窗体中使用以下子项

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

任何帮助将不胜感激。

我不会说你在做什么是错的(因为它永远不会工作),但它吓坏了我。 这不是我处理表格的方式。

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

 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行为来破坏它。 为什么你这样做,我无法想象,除非你认为它会解决你陈述的问题。 我的build议是:不要这样做。

更糟糕的是,你试图在Terminate方法中赋值给隐式创build的表单实例。 你也不应该这样做。 我很惊讶,即使编译。

看起来好像你试图强制隐式创build的表单实例模仿一个明确创build的。 在这种情况下,请明确地创build它,如上所示。

Interesting Posts