Доступ к данным таблицы в Excel

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

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

11.12.2008 06:52:12
Что за форматирование? Если при форматировании это данные, может быть , вы могли бы создать запрос , который использует формат () и другие функции для форматирования вывода , а затем экспортировать , что в Excel с TransferSpreadsheet. Не будет работать, если вы хотите сделать форматирование Excel , но вы не знаете, что вы хотите / нужно.
David-W-Fenton 13.12.2008 00:21:51
5 ОТВЕТОВ

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

2
11.12.2008 07:12:53
«Новый» Excel снял этот предел. Просто к вашему сведению.
Learning 12.12.2008 10:25:41
Нет. Все еще существует предел строки (возможно, 1 048 576), намного намного ниже емкости таблиц / записей базы данных (которую я даже не помню), что означает, что это нужно учитывать
Philippe Grondier 12.12.2008 16:33:21

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

2
11.12.2008 07:14:09

Этот макрос 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
3
11.12.2008 14:42:20

У нас есть общая функция, которая будет экспортировать наши непрерывные формы непосредственно в 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. Надеюсь, вам понравится.

альтернативный текст

3
8.02.2017 14:09:23
Я получил ошибку в этой строке columnCount = fc().Section(0).Controls.CountSub или функция не определена. Что fc()? спасибо
Marc 26.09.2012 15:04:54

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

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

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

1
31.05.2015 15:49:47