Почему мой оператор Switch не работает должным образом? - PullRequest
0 голосов
/ 12 февраля 2020

Я получил то, что я думал, было действительно простым небольшим оператором switch, но он возвращает сообщение #error в некоторых ячейках ... выражение, которое я написал:

=Switch(ReportItems!DisplayCheck.Value = "Didn't Exist", "-", ReportItems!FTEP.Value = 0, 0, TRUE, ReportItems!SicknessP.Value/ReportItems!FTEP.Value)

This только отображает ошибку в ячейках, где DisplayCheck = "Не существовало" - все остальные ячейки работают отлично. Так что я знаю, что это работает частично, но почему-то, когда первое выражение возвращает true?

Я также пытался:

=Switch(ReportItems!FTEP.Value = "-", "-", ReportItems!FTEP.Value = 0, 0, TRUE, ReportItems!SicknessP.Value/ReportItems!FTEP.Value)

, но это возвращало #error для каждой ячейки ... Любое понимание очень ценится.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Мне кажется, проблема в том, что ваш оператор switch возвращает разные типы данных. В качестве теста попробуйте изменить первое возвращаемое значение с "-" на nothing или на какое-то очевидное число, например -999.

Если вы получите правильные результаты (без ошибок), вам придется решить как сделать так, чтобы все типы данных были одинаковыми. Возможные варианты:

  1. заменить "-" на nothing
  2. заменить "-" на 0
  3. Привести 2-й и 3-й тесты в строки

Вы можете получить что-то вроде

=Switch(
        ReportItems!DisplayCheck.Value = "Didn't Exist", "-", 
        ReportItems!FTEP.Value = 0, "0", 
        TRUE, CStr(ReportItems!SicknessP.Value/ReportItems!FTEP.Value)
        )
0 голосов
/ 12 февраля 2020

Помните, что switch и iif являются методами, а не устройствами управления потоком, поэтому каждый путь выполняется, и деление на 0 приводит к ошибке.

, поэтому вам нужно заменить 0, даже если они замаскированы элементом управления поток также нулевые значения должны быть рассмотрены

=Switch(ReportItems!FTEP.Value = "-", "-", ReportItems!FTEP.Value = 0 or isnothing(ReportItems!FTEP.Value)
, 0, TRUE, ReportItems!SicknessP.Value/iif(ReportItems!FTEP.Value = 0 or 
isnothing(ReportItems!FTEP.Value),1,ReportItems!FTEP.Value))
...