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

问题描述:

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

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

+0

您可以更新与工作硬编码行代码 - 这里有人那么可以告诉你如何改变它,它的灵活。 我真的不知道你的最终目标是什么。 – dbmitch

+0

按照这个链接,我解决了一些问题,但遇到了一个新的问题http://*.com/questions/37755435/vba-run-time-error-1004-method-range-of-object-global-failed - 当 - 试图对CR – Michael

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

Dim constr As String 

constr = "ODBC;DRIVER=Microsoft Access Driver (*.mdb, *.accdb);" _ 
      & "DBQ=C:\Path\To\Database\File.accdb;" 

With ActiveSheet.ListObjects.Add(SourceType:=0, _ 
           Source:=constr, _ 
           Destination:=Range("$A$1")).QueryTable 

    .CommandText = "SELECT * FROM [Table]" 
    .ListObject.DisplayName = "TableName" 
    .Refresh BackgroundQuery:=False 
End With