Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Ms access Access VBA:记录集不应为空_Ms Access_Vba_Ms Access 2010_Export To Excel_Recordset - Fatal编程技术网

Ms access Access VBA:记录集不应为空

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自

我有一个前端数据库设置,用户可以提取有关他们上传的信息列表的数据。“导出”功能工作正常,只是他们希望结果转到打开的工作簿,在不保存数据的情况下添加包含数据的工作表。问题是,在宏未运行之前或之后运行查询时,创建的查询包含数据。但是,当宏运行时,查询不会返回任何结果。下面是我正在使用的最新VBA。请检查并告知我遗漏的内容。 谢谢,

MS Office-访问:2010

活动参考库:

  • 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 & """));"
谢谢你让我发帖