2010-01-06 47 views
0

讓我設置環境。無法關閉用戶表單

這是在Excel中運行的VBA代碼。

我有一個包含msflexgrid的用戶窗體。此flexgrid顯示客戶和客戶,銷售人員,csr,製造商代表和領土,分配的列表。當您點擊一列時,讓我們假設在地域欄下,另一個用戶窗體打開,顯示一個地區列表。然後,您點擊您選擇的區域,用戶窗體消失,新的區域代替舊的區域。

這一切都很好,直到你點擊你選擇的領土時,'Territory'用戶窗體不會消失(它閃爍),而新的領域不會傳遞底層的用戶窗體。

我應該提到,當我逐步完成代碼時,它的工作效果很好。

我假設它有一些與flexgrid做所有其他用戶窗體(沒有flexgrids),打開用戶窗體工作就好了。

以下是一些代碼示例:

**從FlexGrid的顯示區域和用戶窗體的新領地分配時,境內用戶窗體關閉Click事件。

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編程,這有我難倒使用。

任何幫助將不勝感激。

回答

2

我不會說你在做什麼是錯的(因爲它永遠不會工作),但它嚇壞了我。這不是我處理表格的方式。首先,您使用的是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方法內的窗體的隱式創建的實例分配給該對象。你也不應該這樣做。我很驚訝,即使編譯。

你似乎試圖強制隱式創建的表單實例模仿一個明確創建的實例。在這種情況下,請明確地創建它,如上所示。