簡體   English   中英

在給定情況下停止消息框 Excel VBA

[英]Stop message box on a given situation Excel VBA

我正在使用 Excel VBA 創建一個用戶表單,用於注冊一些銷售。 表格如下所示:

我的用戶表單

您可能已經注意到,我使用圖像作為按鈕。 這是因為 VBA 中包含的CommandButton看起來非常過時。 然而,使用圖像作為按鈕也會給我帶來一個讓我發瘋的新錯誤(或不會,取決於你如何看待它)。 填寫此信息的通常過程是輸入產品、數量、價格、客戶,然后單擊按鈕將所有信息保存到工作表中。 付款textbox有時只會填寫。

我為所有這些字段創建了一個數據驗證機制,包括客戶combobox 如果用戶鍵入無效條目或單擊后將字段留空,則會出現一個消息框。 代碼如下:

Private Sub cmbCustomer_AfterUpdate()

  If cmbCustomer.ListIndex > -1 Then
  
  Else
    MsgBox "Please choose a valid customer", vbExclamation
    cmbCustomer.Value = ""
  
  End If

End Sub

這對於避免無效條目非常有用。 棘手的部分是,一旦單擊按鈕,所有字段都會自動刪除。 數據已正確保存,但如果單擊之前使用的最后一個字段是cmbCustomer (或任何其他字段,實際上,因為它們都有類似的機制來避免空數據或無效數據)並且用戶決定再次開始填寫表單產品,出現消息框,因為它是空的並且代碼檢測到無效條目。 我知道這是我的代碼的預期行為,但是如果我使用傳統的CommandButton ,則不會發生這種情況,因為單擊它時,焦點會轉到所述按鈕。 如果我使用基於圖像的按鈕,則焦點將保留在單擊它之前使用的最后一個文本字段上。

一種解決方案是在這種特定情況下(保存數據時)覆蓋消息框。 第二個是重置表單的焦點,或者將焦點設置到圖像上,就像使用常規CommandButton一樣。 任何建議將不勝感激。

您可以自己完成傳統 CommandButton 自動執行的操作:將焦點設置在您想要的位置:

Private Sub cmbCustomer_AfterUpdate()

If cmbCustomer.ListIndex > -1 Then
  
  Else
    MsgBox "Please choose a valid customer", vbExclamation
    cmbCustomer.Value = ""
    myButton.SetFocus
  End If

End Sub

如果 SetFocus 不起作用,請注意您在 UI 事件鏈中的位置: 為什么 my.setfocus 會被忽略?

如評論中所述,圖像按鈕無法獲得焦點。 它后面的透明命令按鈕可以用作代理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM