【问题标题】:How can I save the data in an XLSM workbook to CSV without closing the XLSM?如何在不关闭 XLSM 的情况下将 XLSM 工作簿中的数据保存为 CSV?
【发布时间】:2016-06-14 16:34:56
【问题描述】:

我正在将 XLSM 工作簿的工作表中的数据保存到 CSV 文件中。那部分工作文件。但是当我保存到 CSV 时,它会关闭 XLSM 文件。我想让 XLSM 文件保持打开状态。有没有办法做到这一点并在一个宏下关闭 CSV 文件?

这是我目前所拥有的:

'Since this macro ended without error, save the workbook as a CSV file
ActiveWorkbook.SaveAs Filename:=strPathName & strCSVName, _
    FileFormat:=xlCSVMSDOS, CreateBackup:=False

'Set an object for the CSV file
Set objCsvFile = ActiveWorkbook

'The Save to CSV closed the workbook.  Open the XLSM workbook
Workbooks.Open strPathName & "\" & strXlsmName

如果我现在尝试关闭 CSV 文件,宏会突然停止。

感谢您查看此内容。

【问题讨论】:

  • 如果您复制 xlsm,打开它,然后另存为 csv,该怎么办?这样您的原始 xlsm 就不会受到影响。
  • 我不确定您希望如何将整个 Excel 文件导出为一个 CSV 文件。通常,人们为每张工作表创建一个 CSV 文件(假设该工作表上只有一个表格,并且该表格的左上角与 A1 对齐)。在这种情况下,您可以简单地使用以下解决方案:stackoverflow.com/a/25387016/1153513(使用.Copy 而不是.Move)。但如果这不是一个选项,您可以使用@Ampersand 提议。无论如何,您需要(最终)打开并运行至少一个 .xlsm 文件(以托管 VBA 代码)。
  • 我只是从工作簿中导出活动工作表以导出到 CSV。那部分效果很好。我没有考虑过 Ampersand 的方法。我会用那个。感谢您的帮助。

标签: vba excel csv


【解决方案1】:

如果使用 PC 版 Excel,请考虑使用 Jet/ACE SQL 引擎(Windows .dll 文件)。 Jet/ACE OLDEB 可以连接到您的工作簿,就像它是一个数据库一样,并且可以像导出表格一样导出文本文件。请注意,还会创建一个 scheme.ini 文件来标识 csv 导出的结构。 CSV 分隔是默认设置。

Sub ExportCSV()
    Dim conn As Object
    Dim strConnection As String, strSQL As String

    Set conn = CreateObject("ADODB.Connection")

    ' OPEN DB CONNECTION
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                       & "Data Source='C:\Path\To\Workbook.xlsm';" _
                       & "Extended Properties=""Excel 8.0;HDR=YES;"";"        
    conn.Open strConnection

    ' EXPORT WORKSHEET TO CSV
    strSQL = " SELECT * " _
              & " INTO [text;HDR=Yes;Database=C:\Path\To\CSV\Destination\Folder;" _
              & "CharacterSet=65001].CSVFile.csv" _
              & "  FROM [WORKSHEET$]"

    ' EXECUTE MAKE-TABLE QUERY
    conn.Execute strSQL

    ' CLOSE CONNECTION
    conn.Close
    Set conn = Nothing

En Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2022-08-02
    • 2010-11-27
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多