Ms access Access VBA:记录集不应为空
我有一个前端数据库设置,用户可以提取有关他们上传的信息列表的数据。“导出”功能工作正常,只是他们希望结果转到打开的工作簿,在不保存数据的情况下添加包含数据的工作表。问题是,在宏未运行之前或之后运行查询时,创建的查询包含数据。但是,当宏运行时,查询不会返回任何结果。下面是我正在使用的最新VBA。请检查并告知我遗漏的内容。 谢谢, MS Office-访问:2010 活动参考库:Ms access Access VBA:记录集不应为空,ms-access,vba,ms-access-2010,export-to-excel,recordset,Ms Access,Vba,Ms Access 2010,Export To Excel,Recordset,我有一个前端数据库设置,用户可以提取有关他们上传的信息列表的数据。“导出”功能工作正常,只是他们希望结果转到打开的工作簿,在不保存数据的情况下添加包含数据的工作表。问题是,在宏未运行之前或之后运行查询时,创建的查询包含数据。但是,当宏运行时,查询不会返回任何结果。下面是我正在使用的最新VBA。请检查并告知我遗漏的内容。 谢谢, MS Office-访问:2010 活动参考库: Visual Basic for applications Microsoft Access 14.0对象库 OLE自
- Visual Basic for applications
- Microsoft Access 14.0对象库
- OLE自动化
- Microsoft Excel 14.0对象库
- 微软办公室
- 14.0 Access数据库引擎对象库
宏:
Private Sub ExpFile_Click()
Dim sql2export, s As String, blnExcel, blnWhere As Boolean, qdf As QueryDef, xlApp As Object, ws As Excel.Worksheet
Dim MyDatabase As DAO.Database, MyQueryDef As DAO.QueryDef, MyRecordset As DAO.Recordset
blnWhere = False
If Me. QueryASubform.Visible = True Then 'exceptions
sql2export = "QueryA"
blnWhere = True
ElseIf Me. QueryBSubform.Visible.Visible = True Then 'no Program Group for Build ID
sql2export = " QueryB"
ElseIf Me. QueryCSubform.Visible = True Then 'Bill to and Type report.
sql2export = " QueryC"
Else: Exit Sub
End If
If blnWhere = False Then
s = "select * from " & sql2export & " Where (((" & sql2export & ". GPID)=[Forms]![frmFEFindQA]![GPID]));"
Else: s = "select * from " & sql2export
End If
On Error Resume Next
CurrentDb.QueryDefs.Delete "xlsExport"
Set qdf = CurrentDb.CreateQueryDef("xlsExport", s)
Set xlApp = GetObject(, "excel.application")
If (Err.Number = 0) Then
Set xlApp = GetObject("Excel.Application")
xlApp.Visible = True
Set ws = xlApp.Sheets.Add
Set MyDatabase = CurrentDb
MyDatabase.QueryDefs.Delete ("xlsExport")
Set MyQueryDef = MyDatabase.CreateQueryDef("xlsExport", s)
Set MyRecordset = MyDatabase.OpenRecordset("xlsExport") ‘<------ empty
With xlApp
.ws.Select
.ActiveSheet.Range("a2").CopyFromRecordset MyRecordset
For i = 1 To MyRecordset.Fields.Count
xlApp.ActiveSheet.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
Next i
xlApp.Cells.EntireColumn.AutoFit
End With
Else:
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "xlsExport", "C:\Users\" & Environ("USERNAME") & "\Documents\VehInfoExp", True
xlApp.Workbooks.Open "C:\Users\" & Environ("USERNAME") & "\Documents\InfoExp.xls", True, False
End If
Err.Clear
On Error GoTo 0
Set xlApp = Nothing
End Sub
Private子ExpFile\u Click()
Dim sql2export、s为字符串、blnExcel、blnWhere为布尔值、qdf为QueryDef、xlApp为对象、ws为Excel.Worksheet
将MyDatabase设置为DAO.Database,MyQueryDef设置为DAO.QueryDef,MyRecordset设置为DAO.Recordset
blnWhere=False
如果是我。querysubform.Visible=True然后是“异常”
sql2export=“QueryA”
blnWhere=True
除非我。querysubform.Visible.Visible=True然后“没有用于生成ID的程序组”
sql2export=“QueryB”
除非我。QueryCSubform.Visible=True,然后选择“账单”并键入报告。
sql2export=“QueryC”
其他:退出子系统
如果结束
如果blnWhere=False,则
s=“从“&sql2export&”中选择*,其中(((“&sql2export&.”.GPID)=[Forms]![frmFEFindQA]![GPID])
Else:s=“select*from”&sql2export
如果结束
出错时继续下一步
CurrentDb.QueryDefs.Delete“xlsExport”
设置qdf=CurrentDb.CreateQueryDef(“xlsExport”,s)
Set xlApp=GetObject(,“excel.application”)
如果(Err.Number=0),则
设置xlApp=GetObject(“Excel.Application”)
xlApp.Visible=True
设置ws=xlApp.Sheets.Add
设置MyDatabase=CurrentDb
MyDatabase.querydfs.Delete(“xlsExport”)
设置MyQueryDef=MyDatabase.CreateQueryDef(“xlsExport”,s)
Set MyRecordset=MyDatabase.OpenRecordset(“xlsExport”)”Arg,我找到了答案。经过一周的努力,我决定把问题贴出来,一个小时后我就想出来了
问题出在SQL语句的“Where”子句中。我需要将表单的值作为变量捕获,并将其放入等式中。由于某种原因,当宏运行时,表单的引用部分被赋值为nothing。所以什么也没有归还
因此,以下SQL语句行:
s = "select * from " & sql2export & " Where (((" & sql2export & ".GPID)=[Forms]![frmFEFindQA]![GPID]));"
成为:
s = "select * from " & sql2export & " Where (((" & sql2export & ".GPID)=""" & strWhere & """));"
谢谢你让我发帖。Arg,我找到了答案。经过一周的努力,我决定把问题贴出来,一个小时后我就想出来了
问题出在SQL语句的“Where”子句中。我需要将表单的值作为变量捕获,并将其放入等式中。由于某种原因,当宏运行时,表单的引用部分被赋值为nothing。所以什么也没有归还
因此,以下SQL语句行:
s = "select * from " & sql2export & " Where (((" & sql2export & ".GPID)=[Forms]![frmFEFindQA]![GPID]));"
成为:
s = "select * from " & sql2export & " Where (((" & sql2export & ".GPID)=""" & strWhere & """));"
谢谢你让我发帖