使用VBA将数据从MS Access导出到Excel

时间:2011-04-15 16:18:45

标签: ms-access vba ms-access-2007 export-to-excel

我在MS Access中有一个表,它有以下数据要导出到excel

  1. 发行号码
  2. 测试用例
  3. 结果
  4. 导出到Excel后,我希望将不同的版本号作为从A2开始的行,将不同的测试用例名称作为从B1开始的列。可能有几千条记录。然后将每个单元格设置为结果标记。此外还需要一些花哨的着色/边界材料。

    问题 - 是否可以在Access中使用VBA执行此操作,如果是,那么该怎么办?任何提示,样本,示例,资源都会受到赞赏...我用Google搜索了但我遇到的最多的事情是DoCmd.TransferSpreadsheetDoCmd.OutputTo,我认为这不会做我想要的。看到CreateObject("Excel.Application")的一些例子,但不确定使用这种方式有什么限制和性能。

2 个答案:

答案 0 :(得分:1)

我不知道它是否适用于您的情况,但您可能会尝试将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中提取。

答案 1 :(得分:1)

是的,在很多情况下DoCmd.TransferSpreadsheet命令都不合适。

最简单的方法是在Access(Early Binding)中引用Excel xx.x对象模型。以这种方式创建和测试您的vba导出功能。然后,一旦对输出感到满意,请删除Excel对象模型引用,然后更改对象以使用使用CreateObject的Late Binding。这使您可以轻松地使用其他使用不同版本的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