Совместное использование Excel и Access, передавая переменную из Excel для доступа - PullRequest
0 голосов
/ 26 февраля 2019

В Excel у меня есть связанная таблица с таблицей доступа "tbl_Output"

В настоящее время есть ручной шаг, перед тем как запустить макрос Excel, я должен зайти в базу данных и открыть запрос на создание таблицы.и вручную введите критерий и запустите.Назовите его Поле «Имя поставщика»

Это имя поставщика существует в документе Excel.Можно ли объявить эту переменную в Excel, передать ее для доступа и выполнить запрос создания таблицы, используя эту переменную в качестве критерия.

Задача запускается для многих поставщиков, поэтому, если я смогу автоматизировать этот шаг, я смогу создатьцикл, чтобы пройти через всех поставщиков.

Я попытался обойти это путем создания сводной сводной таблицы к источнику данных, на котором основан запрос создания таблицы, а затем фильтрации в самой сводной таблице Excel, но из-за большого размераобъем данных, для обновления которых требуется слишком много времени.

Извините, если это что-то очевидно.Я не знаком с кодированием vba с доступом.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Большое спасибо Glenn G

Код, который вы предоставили, был чрезвычайно полезен и направил меня в правильном направлении.

У меня были проблемы во время выполнения с DAO даже с добавленными ссылкамихотя, но работал вокруг этого.

Код, который я получил, был:

Sub UpdateDatabase()
Dim DBPath As String
Dim xlcell As Range
Dim sSQL As String, stProvider As String
Dim DB As New ADODB.Connection
    DBPath = "C:\Temp\Data.accdb"
    stProvider = "Microsoft.ACE.OLEDB.12.0"
    With DB
        .ConnectionString = DBPath
        .Provider = stProvider
        .Open
    End With
    Set xlcell = Sheet3.Range("X2")
    Do Until xlcell.Value = ""
        venid = xlcell.Value
        sSQL = "SELECT ALL * INTO tbl_Output FROM qry_Data WHERE (((qry_Data.VendorName)='" & xlcell.Value & "'));"
        DB.Execute "DROP TABLE tbl_Output;"
        DB.Execute sSQL
        Set xlcell = xlcell.Offset(1, 0)
    Loop
    DB.Close
    Set DB = Nothing
    Set xlcell = Nothing

Еще раз спасибо за вашу помощь.

С уважением

Ричард

0 голосов
/ 26 февраля 2019

Не 100% на вопрос, который задают, но я собираюсь сделать снимок.Приведенный ниже код будет принимать список Имен поставщиков [Идентификаторы поставщиков] и будет циклически проходить по списку, выполняя запрос создания таблицы для каждого из Идентификаторов поставщиков, который содержит информацию для этого конкретного поставщика

Sub umCreateDBTables()
    Dim DBPath As String ' Path to the database with the information
    Dim DBPath2 As String ' Path to the database to store the newly created tables in
    Dim xlCell As Range
    Dim sSQL As String
    Dim DB As DAO.Database
    Dim VenID As String
    Dim i As Integer
        DBPath = "C:\DB_Temp\AccessDB_A.accdb"
        DBPath2 = "C:\DB_Temp\AccessDB_B.accdb"
        Set DB = OpenDatabase(DBPath, True, False)
        Set xlCell = Range("A2") ' Assumes that this is the beginning of the column with your vendor ids
        Do Until xlCell.Value = "" ' Loops through the list of vendor ids until it gets to an empty cell
            VenID = "v_" & xlCell.Value ' would be best to feed this through a function to strip out any invalid db field name characters
            sSQL = "SELECT T1.F1, T1.F2, T1.F3, INTO " & VenID & " IN '" & DBPath2 & "' FROM T1 WHERE (((T1.F1)='" & xlCell.Value & "'));"
            For i = DB.TableDefs.Count - 1 To 0 Step -1 ' Cycle through the list of database objects [tables, queries, etc....]
                If DB.TableDefs(i).Name = VenID Then ' If the vendor table already exists in the DB, delete it so it can be recreated
                    DB.TableDefs.Delete (VenID)
                End Select
            Next i
            DB.Execute sSQL ' Run the SQL to create the vendor table
            Set xlCell = xlCell.Offset(1, 0) ' move down to the next row
        Loop
        DB.Close
        Set DB = Nothing
        Set xlCell = Nothing
End Sub

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

...