2015-04-17 94 views
1

我想導出工作表以存儲爲CSV,以便我們可以返回並重新檢查數據集。我已經輸出了列A中的整個工作表的代碼,我想要工作表輸出,因爲它在工作表中。誰能幫我?將工作表導出爲CSV

值得注意的是,表的寬度和長度都是可變的,因此計數器。

Sub DataSets() 

Dim shRefData As Worksheet, shInput As Worksheet 
Set shRefData = ThisWorkbook.Sheets("ReferenceData") 
Dim w, x, y, z As Integer 
Dim filepath As String 

filepath = ThisWorkbook.Path + "\" 
w = 3 
z = 1 
x = 1 

Open ThisWorkbook.Path + "\" + "Dataset" & Format(Now, "DDMMYY") & ".csv" For Output As #1 

Do While shRefData.Cells(w, 1) <> "" 
    w = w + 1 
Loop 
Do While shRefData.Cells(3, z) <> "" 
    z = z + 1 
Loop 

For x = 1 To w 
    For y = 1 To z 
     Print #1, Cells(x, y) 
     y = y + 1 
    Next 
    x = x + 1 
Next 

Close #1 

End Sub 
+0

你是否得到一個具體的錯誤 - 如果是的話,什麼錯誤和什麼行?是否有你的原因手動寫取出文本文件而不是使用'File.SaveAs ... FileFormat:= xlCSV'?在你的'Open'行中,你同時使用'+'和'&'進行連接 - 只有'&'在VBA字符串中有效 – FreeMan

+0

沒有特定的錯誤,但它將所有內容輸出到列A而非t漢保持目前17欄47行的表格結構。只因爲這是我知道該怎麼做的。 –

回答

1

它是因爲我已經使用直接輸出,寫入一個文件一個強大的很長一段時間,但我相信錯誤是在這裏:

For x = 1 To w 
    For y = 1 To z 
    'this line is the issue: 
    Print #1, Cells(x, y) 
    y = y + 1 
    Next 
    x = x + 1 
Next 

我相信,當你Print #1它會自動將打印後的CRLF(回車,換行)。因此,一切都以一列結束。要解決現有的代碼,我想試試這個:

Dim out as string 
For x = 1 To w 
    out = "" 
    For y = 1 To z 
    'this builds a string of "value, value, value" 
    out = out & Cells(x,y) & ", " 
    y = y + 1 
    Next 
    Print #1, out 
    x = x + 1 
Next 

不過,我相信這將是很容易做這樣的事情*注意,代碼把我的頭,沒有完全調試頂部:

Sub DataSets() 

    Dim shRefData As Worksheet 
    Dim NewBook as Workbook 
    DiM NewName as String 

    Set shRefData = ThisWorkbook.Sheets("ReferenceData") 
    NewName = ThisWorkbook.Path & "\" + "Dataset" & Format(Now, "DDMMYY") & ".csv" 

    set NewBook = workbooks.add 
    shRefData.copy Before:=NewBook.sheets(1) 
    'Application.DisplayAlerts = False 
    NewBook.SaveAs FileName:=NewName, FileFormat:=xlCSV 
    'Application.DisplayAlerts = True 
    NewBook.close 
    set NewBook = Nothing 

End Sub 

這應該將單張紙作爲.CSV文件保存在NewBook中。它將自動刪除NewBook中的所有額外工作表,因爲.CSV不支持多個工作表(這就是爲什麼您必須複製新工作簿的Before:=工作表

一旦確認所有工作都按預期工作,則取消註釋兩個Application.DisplayAlerts行禁用任何警告Excel想要彈出關於丟失額外的牀單等