Excel VBA另存为csv返回xlsx

Excel VBA另存为csv返回xlsx,excel,save-as,vba,Excel,Save As,Vba,我有一个简单的Excel表格,我想保存为CSV文件(然后使用Outlook作为附件发送)。 完成后,我希望原始Excel工作表处于活动状态并关闭CSV文件 这部分工作,除了我似乎无法关闭CSV文件。如果我尝试,Excel将终止 子存储() 使用SaveCopyAs方法: SaveCopyAs方法允许您指定完整的文件路径,从而指定文件类型,所以从这个开始 当您执行Outlook位并使用attach file to mailitem方法时,您指定相同的完整文件路径,它将附加该路径以发送 这样,初始

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

这部分工作,除了我似乎无法关闭CSV文件。如果我尝试,Excel将终止

子存储()

使用SaveCopyAs方法:

SaveCopyAs方法允许您指定完整的文件路径,从而指定文件类型,所以从这个开始

当您执行Outlook位并使用attach file to mailitem方法时,您指定相同的完整文件路径,它将附加该路径以发送

这样,初始工作簿始终保持活动工作簿,无需重新打开


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

请查看。这完全是错误的。创建工作簿并将其另存为.xlsx。打开VB编辑器并粘贴(替换为您的用户名):Sub Test()ThisWorkbook.SaveCopyAs(“C:\Users[username]\Desktop\Test.csv”)结束Sub运行它并查看发生了什么。。。它将把它保存为CSVI,知道你想做什么,但是使用这种方法它不是一个真正的文件转换,只是扩展名被重命名,这会导致文件被破坏。Excel仍然能够打开它,但这并不适用于所有文件格式,也不是一种好的方式。问题不是关于通用解决方案,而是明确地将“简单Excel工作表”作为CSV发送。因此,解决方案可以做到这一点,因为在Excel环境中,这将起作用。ThisWorkbook.SaveCopyAs(“C:\Users[username]\Desktop\Test.csv”)不起作用。它创建了一个副本,尽管文件扩展名是.csv,但它仍然是一个Excel文件。它几乎是原始Excel文件的相同副本。我需要它是一个逗号分隔的文件,以后可以由非Excel程序读取。JakeyG,您的解决方案基本上是建议重命名Excel文件,使其看起来像CSV文件是CSV文件。。?
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