簡體   English   中英

訪問導出子表單到 excel

[英]Access Export Subform to excel

我正在嘗試編寫一些 VBA 來從子表單導出過濾的記錄。 我發現了許多與此問題相關的帖子,並且我已經從這些帖子中拼湊了下面的代碼。

當我運行它時,我收到一個運行時錯誤:

對象 '__temp' 已經存在。

當我單擊調試時,它會突出顯示該行

Set qrydef = db.CreateQueryDef(strTempQryDef, strSQL)

謝謝你的幫助。

Private Sub ExportSubform()

    Dim db As dao.Database
    Dim qrydef As dao.QueryDef

    Dim strSQL As String
    Dim bolWithFilterOn As Boolean
    Dim strTempQryDef As String
    Dim strRecordSource As String

    strTempQryDef = "__temp"

    bolWithFilterOn = me.subsearch_frm.Form.FilterOn

    strRecordSource = me.subsearch_frm.Form.RecordSource

    If InStr(strRecordSource, "SELECT ") <> 0 Then
        strSQL = strRecordSource
    Else
        strSQL = "SELECT * FROM [" & strRecordSource & "]"
    End If

    ' just in case our sql string ends with ";"
    strSQL = Replace(strSQL, ";", "")

    If bolWithFilterOn Then
        strSQL = strSQL & _
        IIf(InStr(strSQL, "WHERE ") <> 0, " And ", " Where ") & _
        me.subsearch_frm.Form.Filter
    End If

    Set db = CurrentDb

    'create temporary query
    Set qrydef = db.CreateQueryDef(strTempQryDef, strSQL)
    db.QueryDefs.Append qrydef
    Set qrydef = Nothing

    DoCmd.TransferSpreadsheet TransferType:=acExport, _
    SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
    TableName:=strTempQryDef, _
    FileName:=Replace(CurrentProject.Path & "\", "\\", "\") & strTempQryDef & ".xlsx"

    ' Delete the temporary query
    db.QueryDefs.Delete strTempQryDef

    Set db = Nothing

End Sub

根據文檔

如果 name 指定的對象已經是 QueryDefs 集合的成員,則會發生運行時錯誤。

因此,您應該在嘗試創建臨時查詢之前刪除它。 為此,您可以使用以下代碼行:

On Error Resume Next
DoCmd.DeleteObject acQuery, strTempQryDef
On Error GoTo 0

此外,根據文檔

在 Microsoft Access 工作區中,如果您在創建 QueryDef 時為名稱提供零長度字符串以外的任何內容則生成的 QueryDef 對象將自動附加到 QueryDefs 集合。

因此,您不需要這一行:

db.QueryDefs.Append qrydef

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM