И DAO, и ADO включают типы объектов набора записей.Однако они не совместимы.Ваше объявление для объектной переменной rs
неоднозначно.
Dim db As DAO.Database, rs As Recordset
Потенциальная проблема заключается в том, что если ваш проект содержит ссылку на ADO, и приоритет этой ссылки выше вашей ссылки DAO, rs
будет в качестве набора записей ADO, а не набора записей DAO.
Я не уверен, что это является причиной ошибки, которую вы видите.Однако установка rs
в db.OpenRecordset(something)
должна завершиться неудачей, если rs является набором записей ADO, поскольку OpenRecordset
возвращает набор записей DAO.
Я думаю, вам следует изменить объявление на следующее:
Dim db As DAO.Database, rs As DAO.Recordset
Даже если это изменение не решит вашу проблему, я призываю вас всегда уточнять тип при объявлении переменных объекта набора записей ... чтобы избежать неоднозначности.
И если это не такисправьте, пожалуйста, сообщите нам, какая строка вашего кода вызывает текущую ошибку, которую вы видите.
Вот еще один красный флаг:
Dim TargetRande As String
Позже у вас есть:
Set TargetRange = Range("A1")
Добавьте Option Explict
в раздел объявлений вашего модуля.Затем выберите Debug-> Compile в главном меню редактора VB.Это усилие выделит имена переменных с ошибками, а также предупредит вас о синтаксических ошибках.