Почему Excel вдруг находит что-то в ячейке? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть функция vba, которая получает строку из рабочей книги и просматривает данные в столбцах набора данных, устанавливает переменные или нет в зависимости от того, что найдено.Для строк 2-16 все работает нормально;пустые клетки пропускаются.Внезапно в строке 17 ячейка, которая кажется пустой, запускает первое условие if.

Я попытался добавить дополнительную проверку для ячеек, содержащих пустую строку, а в самом листе я проверил CODE(H17), которыйбыл #VALUE

Function calcID(r As Long) As Variant
    If (Not IsEmpty(allProps.Cells(r, 8))) Or (Not allProps.Cells(r, 8).Value = "") Then
        MsgBox "Found ID: " & allProps.Cells(r, 8).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 8).Value)
    ElseIf Not IsEmpty(allProps.Cells(r, 9)) Or Not allProps.Cells(r, 9).Value = "" Then
        MsgBox "Found reverse ID: " & allProps.Cells(r, 9).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 9).Value)
    Else
        calcID = ""
    End If
End Function

Я использую CDate в другом месте, и он отлично работает.В конечном итоге ошибка появляется, когда я нахожусь внутри if, потому что я думаю, что у CDate нет строки для работы.

enter image description here

enter image description here

enter image description here

enter image description here

Ответы [ 2 ]

2 голосов
/ 06 июля 2019

Я думаю, что вы хотите обрабатывать ячейки, только если они непустые И не равны пустой строке.Это предотвратит странное поведение, если ячейка почему-то не пуста, но равна пустой строке.

Измените ваши логические ИЛИ на AND.

Function calcID(r As Long) As Variant
    If (Not IsEmpty(allProps.Cells(r, 8))) And (Not allProps.Cells(r, 8).Value = "") Then
        MsgBox "Found ID: " & allProps.Cells(r, 8).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 8).Value)
    ElseIf Not IsEmpty(allProps.Cells(r, 9)) And Not allProps.Cells(r, 9).Value = "" Then
        MsgBox "Found reverse ID: " & allProps.Cells(r, 9).Value & " in allProps row " & r
        calcID = CDate(allProps.Cells(r, 9).Value)
    Else
        calcID = ""
    End If
End Function
0 голосов
/ 05 июля 2019

Часть значений в ячейке, которая начинается с =, берется как формула в Excel.

Например: = тест принимается как формула с такой ошибкой в ​​Excel.

enter image description here

У меня была похожая проблемаи отсортировал его, сравнив значение в ячейке и обрезав ненужное = в значении ячейки.Убедитесь, что в этой ячейке нет значения, из-за которого Excel считает, что это ссылка на формулу или ячейку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...