我的表單允許用戶通過各種控制元件進行過濾,包括字串搜索框。一個單獨的函式CalculateSearchString處理此搜索欄位以進行過濾(關鍵字、精確短語等);在這個函式中,我使用錯誤處理來捕獲由不正確的用戶輸入引起的錯誤(即弄亂標點符號)。錯誤處理作業順利,但如果搜索輸入不正確,我希望代碼完全停止。
我想要的是:
- 用戶輸入格式錯誤的搜索字串,點擊過濾器
- 函式
CalculateSearchFilter拋出錯誤。訊息框:“修正您的搜索字詞!” - 代碼完全停止,未應用過濾器
實際發生的情況:
- 用戶輸入格式錯誤的搜索字串,點擊過濾器
- 函式
CalculateSearchFilter拋出錯誤。訊息框:“修正您的搜索字詞!”Exit function - 呼叫程序
cmdFilterOn仍在運行,應用不完整的過濾器(好像搜索框為空)
問題:如何完全停止代碼執行,不僅在函式中,而且在其呼叫程序中?該函式在多個地方使用,因此將其與呼叫程序合并是不切實際的。
Private Sub cmdFilterOn()
Dim strSearch As String
strSearch = CalculateSearchFilter
'do more stuff
End Sub
Private Function CalculateSearchFilter() As String
On Error GoTo ErrHandler
'do stuff
If 'user input is wrong, then raise a custom error:
Err.Raise 50000
End If
ExitHandler:
Exit Function
ErrHandler:
If Err.Number = 50000 Then msgbox "Fix your search terms!"
Resume ExitHandler
End Sub
Private Sub cmdYetAnotherButton()
'which also calls on CalculateSearchFilter
End Sub
將輸入驗證移動到呼叫程序也不實際,因為它會迫使我重復CalculateSearchFilter() 中的大部分代碼。
(在我寫這篇文章時,我想到了另一個解決方案,即CalculateSearchFilter = "an error occurred"在函式錯誤處理程式和呼叫程序中設定
If CalculateSearchFilter = "an error occurred" Then Exit Sub
...但是有更“官方”的答案嗎?)
uj5u.com熱心網友回復:
您可以嘗試回傳一個布林值
Option Explicit
Private Sub cmdFilterOn()
Dim strSearch As String
If CalculateSearchFilter(strSearch) Then
'do more stuff
End If
End Sub
Private Function CalculateSearchFilter(ByRef strSearch As String) As Boolean
On Error GoTo ErrHandler
'do stuff
If 'user input is wrong, then raise a custom error:
Err.Raise 50000
End If
CalculateSearchFilter = True
ExitHandler:
Exit Function
ErrHandler:
If Err.Number = 50000 Then MsgBox "Fix your search terms!"
CalculateSearchFilter = False
Resume ExitHandler
End Function
Private Sub cmdYetAnotherButton()
'which also calls on CalculateSearchFilter
End Sub
替代方案:如評論中所述,如果您想回傳一個字串,那么我將回傳一個空字串。我不建議回傳一個字串,比如發生錯誤或任何錯誤
Option Explicit
Private Sub cmdFilterOn()
Dim strSearch As String
strSearch = CalculateSearchFilter
If Len(strSearch) > 0 Then
'do more stuff
End If
End Sub
Private Function CalculateSearchFilter() As String
On Error GoTo ErrHandler
'do stuff
If 'user input is wrong, then raise a custom error:
Err.Raise 50000
End If
ExitHandler:
Exit Function
ErrHandler:
If Err.Number = 50000 Then MsgBox "Fix your search terms!"
CalculateSearchFilter = vbNullString
Resume ExitHandler
End Function
Private Sub cmdYetAnotherButton()
'which also calls on CalculateSearchFilter
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443334.html
標籤:vba 毫秒访问 错误处理 ms-access-2010
上一篇:如何在reyclerviewandroid中填充專案寬度子項
下一篇:找到一個不“包含”某個標準的值?
