@ti_zh_vrach
Бывший аптекарь.

Почему 1000 = «нет» — это True?

Добрый день!
Есть часть рабочего кода:
On Error Resume Next
For row_port = 2 To row_port_end
    For row_abc = 2 To row_abc_end
        If Int(portion.Cells(row_port, 6).Value) = Int(abc.Cells(row_abc, 5).Value) Then Call any_do
    Next row_abc
Next row_port
On Error GoTo 0

Обработка исключений нужна, чтобы макрос работал круглосуточно. В обе части равенства приходят числа в виде строки. Слева - входящие данные. Справа - база, куда попала строка "нет". Должен был быть ноль. Без обработки исключений падем в ошибку 13 (type mismatch). А когда обработка есть, то, при попадании слова в правую часть, результат сравнения почему-то True. Почему так происходит? Можно ли как-то обойти или исправить такое поведение с помощью VBA?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
akelsey
@akelsey
Сделайте нормальный обработчик:
For row_port = 2 To row_port_end
    For row_abc = 2 To row_abc_end
      On Error GoTo ErrHandler
        val1 = Int(portion.Cells(row_port, 6).Value)
        val2 = Int(abc.Cells(row_abc, 5).Value) 
        If  val1  =  val2 Then Call any_do
    Next row_abc
Next row_port
Exit Sub
:ErrHandler
  val1=0
  val2=0
Resume Next


PS
Ну само собой там логику поправьте так как вам нужно val2=0 или только val1=0...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы