Вставить данные по пакетам?

#ms-access #vba

#ms-access #vba

Вопрос:

Мне нужен код, в котором пользователь (после вставки данных в таблицу данных), когда он нажимает кнопку, данные будут вставлены в таблицу (я думал использовать здесь инструкцию SQL). В дополнение к этому, одно из полей в этой таблице должно быть вычислено с использованием функции DCount. Итак, мне нужно вычислить это для каждой записи. Дайте мне знать, если идея не ясна, и мне нужно объяснить дальше. Кроме того, если есть идеи получше, расскажите. Спасибо!

Комментарии:

1. Объясните вставку таблицы данных: пользователь использует данные из Excel, например?

2. да, данные из Excel будут вставлены в таблицу данных Access. хотя я вроде как решил это. оказывается, возникает проблема при вставке данных из Excel в access. вы должны использовать буфер обмена, чтобы вставить данные для доступа.

3. Почему бы просто не импортировать электронную таблицу напрямую и не заставлять пользователя вручную выполнять столько работы?

Ответ №1:

Почему бы не создать какой-нибудь VBA для извлечения данных из электронной таблицы, вставки их в таблицу и затем снова закрыть Excel. Все одним нажатием кнопки

Взгляните на приведенный ниже пример

 Dim objApp As Excel.Application
Dim objBook As Excel.Workbook
Dim objSheet As Excel.Worksheet
Dim sSQL As String
Dim Path As String

Set db = CurrentDb()

 Set objBook = Workbooks.Add(Template:=SheetLocation)   'Your excel spreadsheet file goes here where "SheetLocation is typed
            Set objApp = objBook.Parent
                Set objSheet = objBook.Worksheets("Sheet1") 'Name of sheet you want to View
                   objBook.Windows(1).Visible = True
                   objApp.Visible = True

            objApp.DisplayAlerts = False




    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
Set cn = CurrentProject.Connection

' open a recordset
Set rs = New ADODB.Recordset
rs.Open "INSERT YOUR TABLE NAME HERE", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
r = 2 ' the start row in the worksheet
Do While Len(Range("A" amp; r).Formula) > 0
' repeat until first empty cell in column A
    With rs
        .AddNew ' create a new record
        ' add values to each field in the record
        .Fields("INSERT THE TABLE FIELD TO DUMP DATA IN HERE") = Range("A" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("B" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("C" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("D" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("E" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("F" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("G" amp; r).Value
        .Fields("REPEAT AS ABOVE") = Range("H" amp; r).Value
        ' add more fields if necessary...
        .Update ' stores the new record
    End With
    r = r   1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
    objApp.Quit
  

Комментарии:

1. Это делается не в пакетном режиме, как было запрошено в исходном вопросе, а построчно. Мне также не имеет смысла автоматизировать Excel, когда вы можете получить доступ к данным через SQL, если вы используете соответствующую строку подключения.