К сожалению, вы не сообщаете нам, в какой строке вашего кода происходит ошибка.Я подозреваю, что это должно быть на Set DataRng = DBws.Range(Cells(HeaderCell.Row, HeaderCell.Column)...
.Если это так, то ошибка происходит из этого небольшого кусочка illogic: -
Set HeaderCell = DataRng.Find("Received", LookAt:=xlPart)
If HeaderCell Is Nothing Then Set HeaderCell = DataRng.Find("Received", LookAt:=xlWhole)
Предполагая, что DataRng имеет значение, ранее определенное в вашем коде, вы ищете слово "Received" какчасть содержимого любой ячейки.Если он не найден, вы ищете ячейку, которая не содержит ничего, кроме «Получено».Если бы такая клетка существовала, она была бы найдена при частичном поиске.Поэтому, если он не был найден в первом поиске, он не будет найден и во втором.Если первый поиск неудачен, происходит второй.Если второй результат не появляется, ваш код вылетает в тот момент, когда вы пытаетесь использовать диапазон HeaderCell .
Я предлагаю вам посмотреть функцию Find
.Многие его свойства запомнились из предыдущего использования.Поэтому, если вы используете функцию Find
вручную, а затем запустите свой код, в котором большинство свойств не задано (и, следовательно, извлечено из памяти), вы должны ожидать неожиданного.