Вставка данных из Excel в Access с использованием VBA - PullRequest
3 голосов
/ 19 ноября 2010

Я сделал некоторый код для вставки данных из таблицы Excel в базу данных доступа - мой код выглядит следующим образом:

    Sub AddData()

Dim Cn As ADODB.Connection

Set Cn = New ADODB.Connection

'lets connect to the workbook first, I tested this, it works for me
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=sample.xls;Extended Properties=Excel 8.0;" _
& "Persist Security Info=False"

' Append data from Sheet1 of workbook to Table1 of mydb.mdb:
Cn.Execute "INSERT INTO tblSales IN 'C:\Users\User\Documents\access.mdb' SELECT * FROM [datasheet]"

Cn.Close
Set Cn = Nothing

End Sub

Моя проблема заключается в том, что при выполнении этого я получаю сообщение об ошибке «Microsoft Jet Engine не может найти путь к объекту« таблица данных ». Таблица данных - это просто имя листа, на котором расположены данные в моей книге. Любая помощь очень ценится». .

Ответы [ 4 ]

1 голос
/ 19 ноября 2010

Что произойдет, если вы поставите знак $ после имени листа как это [таблица данных $]

0 голосов
/ 19 ноября 2010

Все, что мне не хватает, насколько я вижу, это путь к вашему источнику данных и строка в таблице данных:

Data Source=sample.xls;

Следует прочитать, например:

Data Source=c:\docs\sample.xls;

А:

SELECT * FROM [datasheet$]
0 голосов
/ 19 ноября 2010

Я думаю, что вы не можете выполнить запрос только для любой открытой рабочей книги.Он ДОЛЖЕН быть запущен для файла, это означает, что вы должны указать полный путь к вашему листу, включая имя файла.Если ваша рабочая книга «грязная», сначала нужно сохранить ее.Я бы предпочел

  • зациклить строки таблицы и добавить записи одну за другой
  • или использовать код, который вы только что написали из Access (если это подходит)
0 голосов
/ 19 ноября 2010

Оператор SELECT выполняется в самой базе данных, но вы хотите отправить значения из EXCEL. Поэтому вы должны использовать

cn.Execute "INSERT .... VALUES (" & excelcell_or_variable & ");"

в конечном итоге в цикле для обработки всех строк / столбцов и т. Д.

Надеюсь, что помогает

удачи

РЕДАКТИРОВАТЬ ... не забывайте кавычки, окружающие символы CHAR и их взаимные обозначения; Я использую

' ....
' .... "...VALUES (" & T(Q(MyStringCell)) & T(MyNumCell) & Q(MyLastTextCell) & ");"
' ....

' surrounds a string by single quotes
Private Function Q(Arg as String) As String
    Q = "'" & Arg & "'"
Return

' appens a comma to a string
Private Function T(Arg as String) As String
    T = Arg & ","
Return

РЕДАКТИРОВАТЬ 2 Я полагаю, что в EXCEL все значения, которые вы хотите вставить в БД, находятся в одной строке ...

Предположим, что у вас есть source_range, который содержит более 1 строки, вы должны запустить оператор INSERT для каждой строки в этом диапазоне. Вы используете свойство .Rows для возврата одной строки из диапазона. И вы отправляете несколько столбцов в оператор INSERT в одной строке, используя .Cells(1, 1), .Cells(1,2) .... и т. Д.

пример:

Sub Test()
Dim MyRange As Range, MyRow As Range

    Set MyRange = Range([B4], [C8])   ' source range

    For Each MyRow In MyRange.Rows    ' get one row at the time from source range 
        Debug.Print MyRow.Cells(1, 1), MyRow.Cells(1, 2)
        ' replace the above by your INSERT statement
    Next MyRow

End Sub
...