Функция IIf
ведет себя не так, как вы думаете.Это , а не оператор в троичном стиле в стиле C ++ или C #.Это просто обычная функция, которая означает, что обе ваши условные проверки и , которые выполняет searchstr.Replace, перед его передачей в IIf
.Если searchstr имеет значение null, searchstr.Replace (...) генерирует исключение NullReferenceException, даже если вы ожидали, что оно вообще не будет вызываться.
Оператор If был добавлен в VS2008 для поддержки этого,но если вы находитесь в 2005 году, вы должны расширить его до блока If / Else:
If Not searchstr Is Nothing AndAlso searchstr.Length > 0 Then
searchstr = searchstr.Replace("Desig_id", "designation_id")
Else
searchstr = ""
End If