我想将所有查询从MS Access导出到Excel。我目前能够导出所有非生成表查询,但是,我没有看到生成表查询弹出。有没有办法以以类似的方式导出生成表查询?谢谢。MS Access 2010:如何将所有生成表查询字段导出到Excel
Sub ListQueriesAndFields()
'Macro Purpose: Write all Query and field names to and Excel file
'Source: vbaexpress.com/kb/getarticle.php?kb_id=707
'Updates by Derek - Added column headers, modified base setting for loop to include all fields,
' added type, size, and description properties to export
'Updates by Alex - Converted to be used for Queries instead of Tables.
Dim lTbl As Long
Dim lFld As Long
Dim dBase As Database
Dim xlApp As Object
Dim wbExcel As Object
Dim lRow As Long
'Set current database to a variable and create a new Excel instance
Set dBase = CurrentDb
Set xlApp = CreateObject("Excel.Application")
Set wbExcel = xlApp.workbooks.Add
'Set on error in case there are no tables
On Error Resume Next
'DJK 2011/01/27 - Added in column headers below
lRow = 1
With wbExcel.sheets(1)
.Range("A" & lRow) = "Table Name"
.Range("B" & lRow) = "Field Name"
.Range("C" & lRow) = "Type"
.Range("D" & lRow) = "Size"
.Range("E" & lRow) = "Description"
End With
'AMK - Converted 5/2/2016 for use with Queries instead of Tables
For lQry = 0 To dBase.QueryDefs.Count
'If the table name is a temporary or system table then ignore it
If Left(dBase.QueryDefs(lQry).Name, 1) = "~" Or _
Left(dBase.QueryDefs(lQry).Name, 4) = "MSYS" Then
'~ indicates a temporary table
'MSYS indicates a system level table
Else
'Otherwise, loop through each query, writing the query and field names
'to the Excel file
For lFld = 0 To dBase.QueryDefs(lQry).Fields.Count - 1 'DJK 2011/01/27 - Changed initial base from 1 to 0, and added type, size, and description
lRow = lRow + 1
With wbExcel.sheets(1)
.Range("A" & lRow) = dBase.QueryDefs(lQry).Name
.Range("B" & lRow) = dBase.QueryDefs(lQry).Fields(lFld).Name
.Range("C" & lRow) = dBase.QueryDefs(lQry).Fields(lFld).Type
.Range("D" & lRow) = dBase.QueryDefs(lQry).Fields(lFld).Size
.Range("E" & lRow) = dBase.QueryDefs(lQry).Fields(lFld).Properties("Description")
End With
Next lFld
End If
Next lQry
'Resume error breaks
On Error GoTo 0
'Set Excel to visible and release it from memory
xlApp.Visible = True
Set xlApp = Nothing
Set wbExcel = Nothing
'Release database object from memory
Set dBase = Nothing
末次
你应该有什么工作。我有一个完全按照你的方式工作的导出例程(在QueryDef部分),它也通过'Type = dbQMakeTable'提取查询。注意:你的第一个For应该去'Count -1'。 –
@HansUp,Make Table Query使用SQL CREATE,不一定需要SELECT INTO。 –
我的解决方法是获取创建的实际表(因此存在于我在表上运行的VBA输出中(与上面的代码非常类似,仅用于表)。但是,我必须仍然匹配make我的最终结果必须是所有查询名称+它们的字段名称 –