2013-02-05 7 views
7

Obecnie mój kod to:VBA DoCmd.TransferText - eksportowania rekordów do pliku .csv ze ścieżką zdefiniowane przez użytkownika plików

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" 

Jak mogę zmienić „C: \ export.csv” część tak, że użytkownik jest w stanie zdefiniować ścieżkę pliku i nazwę pliku?

Dzięki.

Odpowiedz

11

Zakładając, że chcesz, aby użytkownik musiał podać dane wejściowe, a następnie wykorzystać te dane wejściowe w wywołaniu TransportTekstu, spróbuj tego:

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

Istnieją inne sposoby tam, ale to jest chyba najłatwiejszy do wdrożenia .

Powodzenia.

+0

Dzięki, to jest lepsze niż to, co miałem - jednak jestem po polu eksploratora okien, którego użytkownik zwykle używa do wykonania takiej akcji. – user1844098

+4

Ach, wtedy chcesz użyć FileDialog - zobacz tutaj: http://support.microsoft.com/kb/824272 – sgeddes

+0

Gotowy! Dziękuję bardzo! – user1844098

5

Przykład ten pozwoli Ci korzystać z FileDialog Save-As obiektu:

Aby korzystać z tej funkcji, należy dodać odniesienie do "Microsoft Office XX.0 Object Library". Dodaj nowy moduł i wklej następującą funkcję:

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 

Teraz w kodzie, w którym chcesz rozpocząć eksport, przeznaczenie: połączeń exportQuery („SELECT * FROM ...”)

polecam definiowanie zmiennej łańcuchowej dla zapytania SQL.

Powiązane problemy