【发布时间】:2016-10-11 16:45:46
【问题描述】:
我已经能够将查询从 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。
【问题讨论】:
-
您能否使用有效的硬编码行更新您的代码 - 然后这里的某个人可以向您展示如何更改它以使其更灵活。我真的不知道你的最终目标是什么。
-
点击此链接,我修复了一些问题,但遇到了新问题stackoverflow.com/questions/37755435/…