Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将查询导出到Excel并将数据放入表MS Access 2013 VBA_Vba_Excel_Ms Access - Fatal编程技术网

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

将查询导出到Excel并将数据放入表MS Access 2013 VBA,vba,excel,ms-access,Vba,Excel,Ms Access,我已经能够将MS Access中的查询导出到Excel工作簿,并自动设置列宽和其他设置的格式,但我无法找到如何将这些数据放入表中。我找到了创建表的命令,如下所示: Sheet1.ListObjects.Add(xlSrcRange, Range("A1:D10"), , xlYes).Name = "myTable1" 但这是硬编码表的大小。因为我要导出多个查询,所以我希望有一个模块化函数,它将接受不同列/行长度的查询,并为所有查询创建表,而不必手动键入大小。以下是我的一些代码: Privat

我已经能够将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文件并格式化它们的地方。知道如何将这些数据直接放入表中吗

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

已修复此问题,但出现了新问题。如果您能提供帮助,请转到。

考虑使用并指定左上角的目的地和特定查询。下面是通过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

您可以尝试使用ODBC查询吗?查看下面的链接,看看这是否能满足您的需求


你能用硬编码的行来更新你的代码吗?这里有人会告诉你如何改变它,使它更灵活。我真的不知道你的最终目标是什么。按照这个链接,我解决了一些问题,但遇到了一个新的问题