Excel 将工作表导出到CSV

Excel 将工作表导出到CSV,excel,csv,export,export-to-csv,vba,Excel,Csv,Export,Export To Csv,Vba,我想导出一个工作表,将其存储为CSV,以便我们可以返回并重新检查数据集。我已经在A列中输出了整个工作表的代码,我希望工作表能够像在工作表中一样输出。有人能帮我吗 值得注意的是,表的宽度和长度都是可变的,因此计数器是可变的 Sub DataSets() Dim shRefData As Worksheet, shInput As Worksheet Set shRefData = ThisWorkbook.Sheets("ReferenceData") Dim w, x, y, z As Int

我想导出一个工作表,将其存储为CSV,以便我们可以返回并重新检查数据集。我已经在A列中输出了整个工作表的代码,我希望工作表能够像在工作表中一样输出。有人能帮我吗

值得注意的是,表的宽度和长度都是可变的,因此计数器是可变的

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
子数据集()
Dim shRefData作为工作表,shInput作为工作表
Set-shRefData=ThisWorkbook.Sheets(“ReferenceData”)
尺寸w、x、y、z为整数
将文件路径设置为字符串
文件路径=此工作簿。路径+“\”
w=3
z=1
x=1
打开此工作簿。路径+“\”+“数据集”和格式(现在是“DDMMYY”)和“.csv”,输出为#1
当shRefData.CELL(w,1)时执行此操作“
w=w+1
环
执行shRefData.CELL(3,z)”时
z=z+1
环
对于x=1到w
对于y=1到z
打印#1,单元格(x,y)
y=y+1
下一个
x=x+1
下一个
关闭#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
我相信,当您
打印#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
然而,我相信做这样的事情会容易得多。注意,我头脑中没有完全调试过的代码:

这样就可以将
NewBook
中的单个工作表保存为.CSV文件。由于.CSV不支持多张工作表,它将自动删除
NewBook
中的所有额外工作表(这就是为什么您必须在新工作簿的
Sheet1之前复制它的原因)


确认一切正常后,取消对两个
应用程序的注释。显示警报
行,以禁用Excel希望弹出的关于丢失额外工作表等的任何警告。

您是否遇到特定错误?如果是,是什么错误,发生在哪一行?是否有理由手动写入文本文件而不是use
File.SaveAs…FileFormat:=xlCSV
?在您的
Open
行中,您同时使用
+
&
进行连接-只有
&
在VBA字符串中工作。没有特定错误,但它将所有内容输出到A列,而不是维护当前为17列和47行的表结构。只有因为这就是我知道怎么做的。
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