Экспорт данных из MS Access в Excel с использованием VBA - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть таблица в MS Access, в которой содержатся следующие данные для экспорта в excel

  1. Номера версий
  2. Контрольные примеры
  3. Результаты

После экспорта в Excel я хочу иметь разные номера выпусков в виде строк, начиная с A2, и разные имена тестовых наборов в виде столбцов, начиная с B1.Там может быть пара тысяч записей.Тогда каждая ячейка будет установлена ​​в тег результата.Кроме того, потребуются некоторые причудливые раскраски / окантовки.

Вопрос - возможно ли это сделать с помощью VBA в Access, и если да, каков путь?Любая подсказка, пример, ресурс был бы оценен ... Я гуглил, но больше всего я наткнулся на DoCmd.TransferSpreadsheet или DoCmd.OutputTo, который, я считаю, не будет делать то, что я хочу.Приведу несколько примеров с CreateObject("Excel.Application"), но не уверен, каковы ограничения и производительность при использовании этого способа.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Да, во многих случаях команда DoCmd.TransferSpreadsheet неадекватна.

Самый простой способ - обратиться к объектной модели Excel xx.x в Access (раннее связывание).Таким образом создайте и протестируйте свою функцию экспорта в VBA.Затем, когда вы будете удовлетворены результатами, удалите ссылку на объектную модель Excel, а затем измените ваши объекты, чтобы использовать позднюю привязку с использованием CreateObject.Это позволяет вам легко иметь другие машины, которые используют разные версии Excel / Access, чтобы использовать его точно так же.

Вот краткий пример:

Sub ExportRecordsetToExcel(outputPath As String, rs As ADODB.Recordset)
'exports the past due report in correct formattig to the specified path

On Error GoTo handler:

    Const xlUP              As Long = -4162 'excel constants if used need to be referenced manually!
    Dim oExcel              As Object
    Dim oBook               As Object
    Dim oSheet              As Object
    Dim row                 As Long

    If rs.BOF And rs.EOF Then
        Exit Sub 'no data to write
    Else
        rs.MoveFirst
    End If

    row = 1

    Set oExcel = CreateObject("Excel.Application")
    oExcel.Visible = False 'toggle for debugging

    Set oBook = oExcel.Workbooks.Add 'default workbook has 3 sheets

    'Add data to cells of the first worksheet in the new workbook.
    Set oSheet = oBook.worksheets(1)

    Do While rs.EOF = False

        oSheet.range("A" & row).value = rs.Fields("MyField").value

        'increase row
        row = row + 1
    Loop

    oBook.SaveAs (outputPath)

'tidy up, dont leave open excel process
    Set oSheet = Nothing
    Set oBook = Nothing
    oExcel.Quit
    Set oExcel = Nothing
Exit Sub
handler:

    'clean up all objects to not leave hanging processes
End Sub
1 голос
/ 15 апреля 2011

Я не знаю, сработает ли это для вашего случая, но вы можете попробовать добавить код VBA в документ Excel, а не в базу данных Access.Затем вы можете обновить данные из файла Excel и добавить туда форматирование.Вот один пример:

http://www.exceltip.com/st/Import_data_from_Access_to_Excel_%28ADO%29_using_VBA_in_Microsoft_Excel/427.html

(или посмотрите другие примеры на http://www.exceltip.com/exceltips.php?view=category&ID=213)

Опять же, это может не сработать для вашего случая, но это может бытьвариант для рассмотрения. По сути, вместо нажатия из Access, вы бы вытащить из Excel.

...