Используйте ADODB, чтобы вставить INTO конкретную таблицу в книгу Excel - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь использовать ADODB для выполнения команды SQL INSERT INTO на листе Excel.Я смог вставить в лист, когда в нем был только один столбец, используя этот код:

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1

Dim Connection As ADODB.Connection
Set Connection = New ADODB.Connection

Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=PathToFile.xls;Extended 
Properties=Excel 8.0;"

Connection.Open

Dim SQL As String

SQL = "INSERT INTO [Sheet1$] VALUES('Test')"
Call Connection.Execute(SQL, , CommandTypeEnum.adCmdText Or ExecuteOptionEnum.adExecuteNoRecords)

Но я хочу, чтобы в одном листе было три отдельных таблицы и указать, какие из таблиц вставитьв.Как я могу это сделать?Я пытался создать таблицы, присвоить им имена и использовать этот оператор SQL для указания таблицы, но я продолжал получать сообщение об ошибке: ядру базы данных Microsoft Jet не удалось найти объект «TestTable1».Убедитесь, что объект существует, и что вы правильно написали его имя и путь.

SQL = "INSERT INTO TestTable1(ID) VALUES('test')"

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете сделать что-то вроде этого:

Sub TestInsert()

    InsertRecords Sheet4.Range("B3").CurrentRegion, _
               "insert into @ values('AAA','BBB','CCC')"

    InsertRecords Sheet4.Range("F3").CurrentRegion, _
               "insert into @ values('ZZZ')"

    InsertRecords Sheet4.Range("H3").CurrentRegion, _
               "insert into @ values('Whirled',99999)"

End Sub



Sub InsertRecords(rng As Range, sSQL As String)

    Const S_TEMP_TABLENAME As String = "SQLtempTable"
    Dim oConn As New ADODB.Connection
    Dim sPath

       'name the selected range
       On Error Resume Next
       ThisWorkbook.Names.Item(S_TEMP_TABLENAME).Delete
       If Err.Number <> 0 Then Err.Clear

       On Error GoTo haveError
       ThisWorkbook.Names.Add Name:=S_TEMP_TABLENAME, RefersToLocal:=rng

       sPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name

       oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                  "Data Source=" & sPath & _
                  ";Extended Properties=""Excel 8.0;HDR=Yes"""

       oConn.Execute Replace(sSQL, "@", S_TEMP_TABLENAME)

      Exit Sub

haveError:
      MsgBox Err.Description

End Sub

До:

enter image description here

После:

enter image description here

...