Доступ к данным таблицы в Excel - PullRequest
3 голосов
/ 11 декабря 2008

У меня есть проблема, на которой я застрял.

Я хочу экспортировать свою таблицу доступа в файл Excel. В настоящее время я делаю это, используя DoCmd.TransferSpreadsheet, но я хочу, чтобы на экспортированных данных было выполнено какое-то форматирование. Могу ли я отформатировать данные, которые я отправляю в Excel, или мне нужно написать макрос в Excel, который будет форматировать эти данные после их экспорта из Access?

Ответы [ 5 ]

3 голосов
/ 12 декабря 2008

У нас есть общая функция, которая будет экспортировать наши непрерывные формы непосредственно в Excel. Вам нужно будет добавить библиотеку Microsoft Excel в доступные инструменты, чтобы она работала из вашего кода. Эта функция может быть доступна пользователям во всех ваших формах. Если вы хотите экспортировать напрямую из таблицы, вы можете легко адаптировать его.

Public Function ExportToExcel(x_frm as Form)

Dim ctl As Control, _
    xlApp As Excel.Application, _
    xlBook As Excel.Workbook, _
    xlSheet As Excel.Worksheet, _
    columnName() As String, _
    columnCount as Integer

'suppose Excel is not opened. You can add an extra control for that'
Set xlApp = CreateObject("Excel.Application")

'create an Excel workbook, declare the first sheet'
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
xlApp.Visible = False

columnCount = fc().section(0).Controls.Count

'use array columnName() to collect the column names of detail section in tabbed order'
ReDim columnName(columnCount)

For Each ctl In fc().section(0).Controls
    columnName(ctl.TabIndex) = ctl.Name
Next ctl

'This function will add a title to the excel sheet with my favorite formating'
'I can for example decide this title to be bold/Arial/16 on cell(B2)'
addTitleToExcelSheet xlSheet, x_frm.Name

'This function will add the column names to my Excel sheet with my favorite formating'
'for example column names will be added on row 4, columns B to B + columnCount'
addColumnNameToExcelSheet xlSheet, columnName()

'This function will add the column values to my Excel sheet with specific format (date, number, etc)'
'Data will be added to the range defined by '
'row 5 to row 5 + x_frm.recordset.recordcount, '
'columns B to B + columnCount.'
'Recordset values will have to be read according to tab order'
'exported data can depend on recordset filter and orderBy property: your choice'
addColumnValueToExcelSheet xlSheet, columnName(), x_frm.Recordset

'The Excel sheet is made visible and saved under the current folder with the forms name'
xlApp.Visible = True
xlBook.SaveAs x_frm.Name & ".xls"

Set xlBook = Nothing
Set xlSheet = Nothing
Set xlApp = Nothing

End Function

Вот вид на результат. Слева - форма доступа, справа - результат Excel exportToExcel. Надеюсь, вам понравится.

alt text

3 голосов
/ 11 декабря 2008

Этот Excel макрос извлекает данные из базы данных MS Access:

Sub Makro1()
''
Const sDB = "c:\db1.mdb"
Const sSQL = "SELECT * FROM Table1"

    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MS Access-database;DBQ=" + sDB + ";FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
        , Destination:=Range("A1"))
        .CommandText = Array(sSQL)
        .Name = "Query1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
2 голосов
/ 11 декабря 2008

Может быть проще начать с электронной таблицы Excel, которая предварительно настроена на ваше форматирование. Также может быть проще использовать VBA из Excel и извлекать данные из Access (и форматировать их), а не выталкивать из Access. Excel VBA будет лучше подготовлен для форматирования Excel. И одно так же легко, как и другое. Если вы пытаетесь сделать это только с помощью макросов, с макросами Excel это, вероятно, будет проще, чем с макросами Access.

2 голосов
/ 11 декабря 2008

У меня нет особого опыта работы с этим доменом, но, пожалуйста, обратите внимание, что в Excel ограничение строк намного меньше, чем в Access.

1 голос
/ 30 июля 2009

Если вы используете DoCmd.TransferSpreadsheet и создаете оригинал, а затем редактируете его так, чтобы форматирование было правильным, вы можете снова запустить DoCmd.TransferSpreadsheet, и он обновит файл со значениями, но сохранит форматирование.

Однако, если человек затем отредактирует файл, добавив новые вкладки или добавив вычисления и т. Д., DoCmd.TransferSpreadsheet больше не будет работать и завершится с ошибочным сообщением об ошибке. Итак, что мы делаем в нашей среде - это DoCmd.TransferSpreadsheet в исходный файл с форматированием, а затем копируем файл на рабочий стол пользователя, а затем открываем эту копию, чтобы пользователь не мешал исходному файлу.

Этот подход является минимальным кодом, чистым и простым в обслуживании решением. Но для этого требуется дополнительный «исходный» или оригинальный файл. Работает в Access 2007.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...