Проблема в том, что вы используете код VBA в операторе SQL.Следующая строка будет скомпилирована, но завершится с ошибкой при выполнении:
Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value"
Сбой, потому что вы все еще в операторе SELECT, когда вы используете функции VBA Worksheets (), .Range и .Value.IIRC, вы должны быть в состоянии использовать синтаксис SQL для выбора определенного диапазона на листе.Правильный синтаксис для этого должен быть:
"SELECT * FROM [Sheet$]"
Если вы хотите определенный диапазон, то вы попытаетесь:
"SELECT * FROM [Sheet$A1:C20]"
На эту статью Microsoft есть: http://support.microsoft.com/kb/257819 если вам нужна дополнительная информация об использовании ADO в Excel.Сценаристы также написали приличную статью, которая помогла мне понять это несколько лет назад: http://technet.microsoft.com/en-us/library/ee692882.aspx.
Надеюсь, это поможет вам решить вашу проблему.Тем не менее, я оставлю вас с одним словом предупреждения.Я помню, как столкнулся с некоторыми действительно странными проблемами при запросе уже открытой электронной таблицы Excel, когда я впервые использовал этот код.Если бы я запрашивал электронную таблицу Excel, которая уже была открыта, я столкнулся бы с проблемой утечки памяти, и Excel в конечном итоге не хватило бы памяти для использования.Единственный способ решить проблему - полностью закрыть Excel.Также не имело значения, были ли ссылки ADO правильно закрыты / очищены или нет.
На самом деле, я просто прогуглил это, чтобы дважды проверить, и вот статья об ошибке: http://support.microsoft.com/default.aspx?scid=kb;en-us;319998&Product=xlw.