【问题标题】:Excel VBA SaveAs csv return to xlsxExcel VBA SaveAs csv 返回到 xlsx
【发布时间】:2018-03-07 12:01:59
【问题描述】:

我有一个简单的 Excel 表,我想将它保存为 CSV 文件(然后使用 Outlook 作为附件发送)。 完成后,我希望原始 Excel 工作表处于活动状态并关闭 CSV 文件。

这部分有效,但我似乎无法关闭 CSV 文件。如果我尝试,Excel 将终止。

子保存()

Dim ActBook As Workbook
Dim CurrentFile As String
Dim NewFile As String

CurrentFile = ThisWorkbook.FullName
NewFile = Application.DefaultFilePath & "\new.csv"

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=NewFile, FileFormat:=xlTextWindows
Application.DisplayAlerts = True

Set ActBook = ActiveWorkbook
Workbooks.Open CurrentFile          ' Make original file active
'   ActBook.Close                   ' This does not work, Excel terminates

End Sub

【问题讨论】:

标签: excel save-as vba


【解决方案1】:

使用 SaveCopyAs 方法: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbook-savecopyas-method-excel

SaveCopyAs 方法允许您指定完整的文件路径和文件类型,所以从它开始。

当您执行 Outlook 位并使用将文件附加到 mailitem 方法时,您指定相同的完整文件路径并将其附加到发送。

以这种方式,初始工作簿始终是活动工作簿,您无需重新打开它。

在您当前的方法中,.Close 将终止 Excel,因为活动工作簿是当时打开的工作簿...

【讨论】:

  • 这完全是错误的。创建工作簿并将其另存为 .xlsx。打开 VB 编辑器并粘贴(替换为您的用户名): Sub Test() ThisWorkbook.SaveCopyAs ("C:\Users[username]\Desktop\Test.csv") End Sub 运行它,看看会发生什么......它将其保存为 CSV
  • 我知道你想做什么,但是这种方法不是真正的文件转换,只是扩展名被重命名,导致文件损坏。 Excel 仍然可以打开它,但这不适用于所有文件格式,也不是一个好方法。
  • 问题不是关于通用解决方案,而是明确关于以 CSV 格式发送“简单 Excel 工作表”。因此,该解决方案使用 Excel 环境中的这一事实来实现这一点。
  • ThisWorkbook.SaveCopyAs ("C:\Users[username]\Desktop\Test.csv") 不起作用。它会创建一个副本,虽然文件扩展名为 .csv,但它仍然是 Excel 文件。它与原始 Excel 文件几乎完全相同。我需要它是一个逗号分隔的文件,以后可以由非 Excel 程序读取。
  • JakeyG,您的解决方案基本上是建议将 Excel 文件重命名为看起来像 CSV 文件 CSV 文件..?
猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
相关资源
最近更新 更多