2013-02-05 44 views
7

目前我的代碼是這樣的:VBA DoCmd.TransferText - 導出查詢使用用戶定義的文件路徑爲.csv

Dim testSQL As String 
Dim qd As DAO.QueryDef 

testSQL = "SELECT * FROM qryExample WHERE exampleID IN (" & strExampleIDList & ")" 
Set qd = db.CreateQueryDef("tmpExport", testSQL) 
DoCmd.TransferText acExportDelim, , "tmpExport", "C:\export.csv" 
db.QueryDefs.Delete "tmpExport" 

如何改變「C:\ export.csv」部分,使得用戶能夠定義文件路徑和文件名?

謝謝。

回答

11

假設你要提示用戶輸入,然後使用該輸入您TransferText電話,試試這個:

Dim UserInput As String 
UserInput = InputBox("Please enter the file path.", "I WANT A VALUE!") 
DoCmd.TransferText acExportDelim, , "tmpExport", UserInput 

還有其它的方法在那裏,但是這也許是最容易實現的。

祝你好運。

+0

謝謝,這比我有 - 但是,我在用戶通常會用來執行此操作的Windows資源管理器框後。 – user1844098

+4

啊,那麼你想使用FileDialog - 看看這裏:http://support.microsoft.com/kb/824272 – sgeddes

+0

明白了!非常感謝! – user1844098

5

這個例子將允許您使用FileDialog的另存爲對象:

要使用此功能,您必須添加一個引用了「微軟辦公XX.0對象庫」。添加一個新的模塊並粘貼以下功能:

Public Sub exportQuery(exportSQL As String) 
    Dim db As DAO.Database, qd As DAO.QueryDef 
    Dim fd As FileDialog 
    Set fd = Application.FileDialog(msoFileDialogSaveAs) 

    Set db = CurrentDb 

    'Check to see if querydef exists 
    For i = 0 To (db.QueryDefs.Count - 1) 
     If db.QueryDefs(i).Name = "tmpExport" Then 
      db.QueryDefs.Delete ("tmpExport") 
      Exit For 
    End If 
    Next i 

    Set qd = db.CreateQueryDef("tmpExport", exportSQL) 

    'Set intial filename 
    fd.InitialFileName = "export_" & Format(Date, "mmddyyy") & ".csv" 

    If fd.show = True Then 
     If Format(fd.SelectedItems(1)) <> vbNullString Then 
      DoCmd.TransferText acExportDelim, , "tmpExport", fd.SelectedItems(1), False 
     End If 
    End If 

    'Cleanup 
    db.QueryDefs.Delete "tmpExport" 
    db.Close 
    Set db = Nothing 
    Set qd = Nothing 
    Set fd = Nothing 

    End Sub 

現在你的代碼中要啓動導出,使用: 呼叫exportQuery(「SELECT * FROM ...」)

我建議爲你的SQL查詢定義一個字符串變量。

Public Sub someButton_Click() 
    Dim queryStr as String 
    'Store Query Here: 
    queryStr = "SELECT * FROM..." 

    Call exportQuery(queryStr) 

    End Sub