2017-09-03 16 views
0

尊敬的用戶,請您注意!對於小型項目,我有幾個模塊和一個用戶窗體。 在模塊中,我有一個循環語句調用用戶窗體。用戶窗體爲用戶提供了四個選項供用戶選擇。Excel VBA - 從用戶表單中的另一個模塊退出循環

當選擇一個選項時,將定義一個公共變量(字符串)。 循環將填充列中的字符串。 但現在循環不會停下來之前,所有的答案。

我想創建一個退出按鈕,因爲如果該列表是大的,這是很煩人的)。

所以我想創建一個命令按鈕「退出」,它可以被點擊(在用戶的形式),以取消循環。

但是因爲這個按鈕是在用戶的形式,這將不會停止循環,它只是關閉當前用戶,但未來會後顯示。

你知道停止從出用戶的形式循環最好的方法是什麼?

我知道像藤的技術,但只能用於錯誤處理,將無法工作,因爲轉到需要在用戶形式子,我要取消另一個模塊的總循環。

我很堅持這個,我希望你們能幫助我。 我認爲這會很簡單。

問候, Dubblej

+0

讓退出按鈕設置另一個全局變量...然後簡單地檢查它在循環內... –

回答

0

我建議不要使用全局變量以及go to聲明。在你的表單中添加一個函數來顯示錶單並返回用戶選擇是否要繼續。事情是這樣的:

Option Explicit 

Private continue As Boolean 

Public Function ShowDialog() As Boolean 
    Me.Show 1 
    ShowDialog = continue 
End Function 

Private Sub btnCancel_Click() 
    continue = False 
    Me.Hide 
End Sub 

Private Sub btnOK_Click() 
    continue = True 
    Me.Hide 
End Sub 

而在你的模塊調用ShowDialog功能,如果它的返回值是假退出循環:

Option Explicit 

Public Sub Sub1() 
    Dim form As New UserForm1 

    Do 
     If Not form.ShowDialog Then 
      Exit Do 
     End If 
    Loop 
End Sub 
+0

謝謝@Mehdi Javan,我仍然在學習VBA,現在它工作。我不喜歡另一個全局變量(boolean),它也嵌入在循環中。當這個錯誤時,循環退出。爲什麼我應該避免使用全局變量?他們現在可以很方便:)。 – Dubblej

+0

全局變量容易出錯,特別是當您的代碼增長時。因爲,他們可以在任何地方訪問或更改,這使他們很難跟蹤。我們第一次對它們進行定義時,我們的意圖很明確,但最終它們也可能用於其他目的,並且它們的不同用法可能會發生衝突並導致難以發現的錯誤。你可以在這裏找到詳細的解釋:https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-vil –