Я немного почистил код. Вы можете поместить значения из текстовых полей в переменные, что делает код, использующий значения, менее громоздким.
'get the dates
Dim before As String = A_BeforeDateTxt.Value
Dim after As String = A_AfterDateTxt.Value
'check if both date fields are filled out
If after.Length > 0 And before.Length > 0 Then
'check if they are valid (ie, one date is not bigger then the other)
If CDate(after) > CDate(before) Then
MsgBox "You have selected invalid dates. Try again."
GetSQLForActiveRecords = False
Exit Function
Else
'this takes both fields and appends them to the sql statement
strSql = strSql & " AND ([Submitted] >= #" & after & "# and [Submitted] <= #" & before & "#)"
End If
Else
'one or both of them are blank, select the one thats entered
If (after.Length = 0 And before.Length > 0 Then
strSql = strSql & " AND ([Submitted] <= #" & before & "#)"
ElseIf before.Length = 0 And after.Length > 0 Then
strSql = strSql & " AND ([Submitted] >= #" & after & "#)"
End If
End If
Вы правы, что значение, которое всегда является строкой, не может быть Nothing. Проверка на условие, которое не может произойти, только делает код более запутанным, поскольку подразумевает, что значение может быть чем-то, чего он на самом деле не может.
Я использовал свойство Length, чтобы проверить, являются ли строки пустыми. Сравнение чисел немного более эффективно, чем сравнение строк, и оно также менее подвержено опечаткам. Вы можете случайно написать «» вместо «», и это не так легко определить.
Я удалил несколько бессмысленных комментариев. Комментарий должен объяснять, что нужно объяснять в коде, комментарий, который буквально говорит о том, что код делает, только загромождает код, как этот:
Exit Function 'exit the function'
Код можно переписать для повторного использования части, в которую вы добавляете условия, чтобы в трех местах этого не было. Хотя это немного усложнит код, поэтому сомнительно, стоит ли оно того.