将查询导出到Excel并将数据放入表MS Access 2013 VBA

时间:2016-06-10 16:19:50

标签: excel vba excel-vba ms-access

我已经能够将查询从MS Access导出到Excel工作簿并自动格式化列宽和其他设置,但我无法找到如何将此数据放入表中。我找到了创建一个表的命令:

Sheet1.ListObjects.Add(xlSrcRange, Range("A1:D10"), , xlYes).Name = "myTable1"

但这是硬编码表的大小。由于我要导出多个查询,我想要一个模块化函数,它将接受不同列/行长度的查询,并为所有这些查询创建表,而无需手动输入大小。以下是我的一些代码:

Private Sub dumpQueries(path As String)

    Dim obj As AccessObject, dB As Object
    Set dB = Application.CurrentData
    For Each obj In dB.AllQueries
        testBool = InStr(obj.name, "Sys")
        If testBool <> True Then
            If obj.name = "example1" Or obj.name = "example2" Then
                DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, obj.name, path, True, editWorksheetName(obj.name)
            End If
        End If
    Next obj

End Sub


Private Sub formatFile(path As String)

Dim Date1 As Date, strReportAddress As String
Dim objActiveWkb As Object, appExcel As Object
Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = False
appExcel.Application.Workbooks.Open (path)

Set objActiveWkb = appExcel.Application.ActiveWorkbook
With objActiveWkb
    Dim i As Integer
    For i = 1 To .Worksheets.count
        .Worksheets(i).Select
        Set sht = Worksheets(i)
        Set StartCell = Range("A1")
        .Worksheets(i).Cells.Select
        .Worksheets(i).Cells.EntireColumn.AutoFit
        .Worksheets(i).UsedRange
        LastRow = StartCell.SpecialCells(xlCellTypeLastCell).Row
        LastColumn = StartCell.SpecialCells(xlCellTypeLastCell).Column
        sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select
    Next
End With

appExcel.ActiveWindow.TabRatio = 0.7
objActiveWkb.Close savechanges:=True
appExcel.Application.Quit
Set objActiveWkb = Nothing: Set appExcel = Nothing

End Sub

还有更多的代码,但这是相关的东西。这是我创建excel文件并格式化它们的地方。知道如何将这些数据直接放入表中吗?

更新:我修复了我收到的所有错误,但仍然没有创建包含所有数据的表。我编辑了上面的代码以完全更新。

解决了这个问题,但新问题出现了。如果您能提供帮助,请转到VBA Run-time error 1004: Method Range of object _Global failed when trying to create tables in Excel 2013

2 个答案:

答案 0 :(得分:0)

考虑使用QueryTables并指定左上角目标和特定查询。下面是Excel VBA代码,您可以从外部Access数据库通过ODBC导入:

public class MyDBContext: DbContext 
{
    public MyDBContext() : base("myConnString")
    {            
        //Disable initializer
        Database.SetInitializer<MyDBContext>(null);
    }
} 

答案 1 :(得分:-1)