В отличие от оператора If, операторы IIf оценивают все пути кода, даже если используется только один путь кода. Это означает, что ошибка в неиспользуемом пути кода будет пузыриться до ошибки в операторе IIf, мешая его правильному выполнению.
Чтобы исправить это, вам нужно использовать функции, которые не будут выдавать ошибку, когда нечего разбивать.
Вот пример кода, который должен делать то, что вы хотите:
=IIf(
InStr(
InStr(
Parameters!Street.Value
, ","
) + 1
,
Parameters!Street.Value
, ","
) = 0
, Nothing
, Right(
Parameters!Street.Value
, Parameters!Street.Value.ToString().Length - (
InStr(
InStr(
Parameters!Street.Value
, ","
) + 1
,
Parameters!Street.Value
, ","
)
)
)
)
Давайте разберемся с этим.
Я использовал комбинацию функций InStr (), Right (), Length () и IIf () для разделения строки без выдачи ошибки.
InStr () используется для определения положения строки "," в адресе. Это возвращает 0, а не ошибку, если не может найти строку.
InStr(Parameters!Street.Value, ",")
Поскольку вы, похоже, ищете вторую запятую в своей функции разделения, вам нужно будет вложить функцию InStr. Используйте местоположение первой запятой в качестве начального местоположения для поиска второй запятой. Не забудьте +1, или вы снова найдете первую запятую.
InStr(InStr(Parameters!Street.Value, ",") + 1, Parameters!Street.Value, ",")
Теперь вы можете найти вторую запятую, не выдавая ошибку, даже если запятых не существует.
В зависимости от расположения второй запятой используйте функцию Right (), чтобы захватить все символы справа от второй запятой. Поскольку Right () нужно знать, сколько символов в конце, а не в начале, вам необходимо вычесть расположение запятой из Length () строки. Это эффективно разбивает строку через запятую.
Right(
Parameters!Street.Value
, Parameters!Street.Value.ToString().Length - (
InStr(InStr(Parameters!Street.Value, ",") + 1, Parameters!Street.Value, ","))
)
)
Если у вас более 2 запятых, вы можете просто взять строку между 2-й и 3-й запятой, выполнив функцию Left (), которая находит местоположение 3-й запятой.
Теперь вы можете использовать вашу функцию IIf () для возврата NULL (Nothing), если нет второй запятой. Функция вверху показывает, как все это сочетается.
Это можно исправить с помощью функций, но предоставленный код показывает, как это можно сделать.