2017-03-24 47 views
0

我嘗試在刷新查詢表後將單張導出爲.txt文件。 我不想用Workbooks.Add.Copy and .PasteSpecial的方法。 到目前爲止,我做了這一點:使用(Excel VBA)更新QueryTable並將結果導出爲txt文件

Do Until i = 5 
    With Sheets(2).QueryTables(1) 
    .Refresh BackgroundQuery:=False 
    End With 

    Sheets(2).SaveAs ThisWorkbook.path & filename & i & ".txt", _ 
    FileFormat:=xlTextMSDOS, CreateBackup:=False 

i = i + 1 
Loop 

在第一循環這個偉大工程,但在第二次我得到的錯誤。

+1

*我收到錯誤*好,我們無法閱讀您的想法或屏幕。你得到了什麼錯誤,哪條線提出了它? –

+0

錯誤是這樣的:沒有文件訪問。該文件可能已損壞,位於未響應的服務器上或只讀。我認爲在第一次循環之後,文件被保存爲txt,並且代碼使用變得不合理,因爲xlsm不再存在('ThisWorkbook.path')。 – H3ll0

+0

你錯過了一個路徑分隔符,可能就是這個問題。嘗試'... SaveAs ThisWorkbook.Path&Application.PathSeparator&filename&i&「.txt」...' –

回答

0

好吧,我知道自己錯在哪裏。這是我原來的代碼:

Sub test() 
Dim filename As String 
Dim i As Integer 
filename = "test_txt" 
i = 0 
Do Until i = 5 
    With Sheets(2).QueryTables(1) 
    .Refresh BackgroundQuery:=False 
    End With 

    Sheets(3).SaveAs ThisWorkbook.Path & "\FOLDER\" & filename & i & ".txt", _ 
    FileFormat:=xlTextMSDOS, CreateBackup:=False 

i = i + 1 
Loop 
End Sub 

,因爲我有ThisWorkbook.Path環路,它改變了我每次運行它。解決方法很簡單 - 把ThisWorkbook.Path outsite循環,就像這樣:

Sub test() 
Dim filename As String 
Dim saveloc as String 
Dim i As Integer 
filename = "test_txt" 
saveloc = ThisWorkbook.Path & "\FOLDER\" 
i = 0 
Do Until i = 5 
    With Sheets(2).QueryTables(1) 
    .Refresh BackgroundQuery:=False 
    End With 

    Sheets(3).SaveAs saveloc & filename & i & ".txt", _ 
    FileFormat:=xlTextMSDOS, CreateBackup:=False 

i = i + 1 
Loop 
End Sub 

感謝@大衛Zemens的幫助!

0

假設Sheets(2)ThisWorkbook部分,請嘗試以下操作:

Dim sep As String 
sep = Application.PathSeparator 

With ThisWorkbook 
    Do Until i = 5 
     .Sheets(2).QueryTables(1).Refresh BackgroundQuery:=False 
     .Sheets(2).SaveAs .path & sep & filename & i & ".txt", _ 
      FileFormat:=xlTextMSDOS, CreateBackup:=False 

     i = i + 1 
    Loop 
End With 
相關問題