Для ниндзя VBA там.
Я столкнулся с проблемой, которая заняла некоторое время, чтобы выяснить, где проблема была вчера.
Теперь, как это исправить?
Вот код, который отлично работает при следующих условиях:
~ ТОЛЬКО ОДИН СТОЛ НА МАШИНЕ ~
Вот код от (я использовал имя таблицы Excel, назначенное для Data2)
Использование Excel VBA для экспорта данных в таблицу MS Access
Public Sub DoTrans()
Set cn = CreateObject("ADODB.Connection")
dbPath = Application.ActiveWorkbook.Path & "\FDData.mdb"
dbWb = Application.ActiveWorkbook.FullName
dbWs = Application.ActiveSheet.Name
scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
dsh = "[" & Application.ActiveSheet.Name & "$]" & "Data2" 'Data2 is a named range
cn.Open scn
ssql = "INSERT INTO fdFolio ([fdName], [fdOne], [fdTwo]) "
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh
cn.Execute ssql
End Sub
Таким образом, я использовал эту заглушку, передавая имя таблицы Access, таблицу Excel, имена полей и имя рабочего листа. Он будет работать только для листа с одной таблицей (именованный диапазон).
Как только я добавляю в таблицу вторую таблицу (именованный диапазон), этот метод больше не работает. Он выдаст ошибку с помощью On Error, но код продолжит работу, без On Error ничего не произойдет.
Мне потребовалось некоторое время, чтобы найти, где код ломается, но это все, две таблицы с разными именами, и это больше не будет работать.
Должен ли я преобразовать таблицу в фактический диапазон и явно указывать Worksheet.Range (адрес или имя) каждый раз?