2015-04-17 77 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想要弹出关于丢失额外的床单等