2016-03-14 36 views
1

我有一個前端數據庫設置,供用戶提取關於他們上傳的信息列表的數據。導出功能正常工作,除非他們希望結果轉到打開的工作簿中,而不保存數據而添加數據表。問題是,當我在宏未運行之前或之後運行查詢時,創建的查詢具有數據。但是,當宏運行時,查詢不會返回任何內容。下面是我使用的最新VBA。請檢閱並告知我錯過了什麼。 謝謝訪問VBA:記錄集應該不是空的

微軟Office - 訪問:2010

有效參考庫:

  • Visual Basic應用程序
  • 的Microsoft Access 14.0對象庫
  • OLE自動化
  • Microsoft Excel中14.0對象庫
  • Microsoft Office
  • 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 

回答

0

精氨酸,我找到了答案。經過一週的嘗試,我決定發佈這個問題,然後在一個小時後我發現了這個問題。

問題出在SQL的「Where」子句中。我需要把表單的值作爲一個變量,並將其寫入等式中。由於某些原因,宏在運行時,表單的引用部分被視爲沒有值。所以沒有任何回報。

因此,SQL的下面一行:

s = "select * from " & sql2export & " Where (((" & sql2export & ".GPID)=[Forms]![frmFEFindQA]![GPID]));" 

變成了:

s = "select * from " & sql2export & " Where (((" & sql2export & ".GPID)=""" & strWhere & """));" 

謝謝你讓我交的。