1.
Это, вообще говоря, неправльно хранить адрес и название в одном поле. Правило Кодда №1 - "Поля должны быть атомарными". Если еще не поздно, то настоятельно рекомендую переделать.
Удостовериться, что в строке встречается индекс пожно по условию:
iif([Предприятие] Like "* [0-9][0-9][0-9][0-9][0-9][0-9]*";...;...)
Далее по instr надо искать цифры, стоящие после других цифр... теоретически можно, но формула получится неимоверно длинная... (мягко

говоря)
Если хотите, можно попробовать написать функцию на VBA и вызывать ее из запроса. Сколько записей в таблите максимально предполагается? А то может VBA окажется плохим решением из-за быстродействия (точнее медленнодействия)...
Однако, я бы все переделал...
Представляете, а если оператор ошибется и введет 5 цифр вместо 6-ти?
2.
Задача, прямо скажем нетривиальная...
Самый простой способ: иметь отдельную форму для ввода новых записей.
В основной форме (для просмотра и правки) делаем "Разрешить добавление = False", создает аналогичную форму (можно просто копированием). В ней свойство "Ввод данных" установить в True.
Теперь из гланой модально вызываем вторую (для этого добавляем кнопку).
Получится добавление записи через отдельное окно, в котором будут видны только добавляемые записи. Прокрутка естественно останется, но она будет выпоняться только между одной-несколькими новыми записями.
Другое, более красивое решение - это обработать событие "До обновления" у формы, но тут надо уметь писать макросы.
Код: Выделить всё
Private Sub Form_BeforeUpdate(Cancel As Integer)
'выполняем проверку правильности заполнения всех полей на форме
if ДанныеНеПолные then
Beep
Cancel = True
end if
End Sub
Теперь, если пользователь на форме что-нибудь поправит, то если проверка корректности на пройжет, никакой скроллинг его никуда не пустит. Будет только БИП-ать и все. (Или не все... если Beep заменить на MsgBox)
Еще не забывайте про такое свойство формы как "Цикл табуляции", возможно оно Вам пригодится.