VBA:SaveAs 方法创建无限的 csv 文件

Posted

技术标签:

【中文标题】VBA:SaveAs 方法创建无限的 csv 文件【英文标题】:VBA: SaveAs method creates infinite csv file 【发布时间】:2017-09-11 13:03:21 【问题描述】:

我正在遍历文件中的多个工作表,将信息复制到另一个工作表(称为 wsCSV,存储在 ThisWorkbook 中),然后我想从该工作表创建一个 CSV 文件。创建工作表后,循环应继续到下一个工作表。

这是应该创建 CSV 的部分代码:

' Create CSV file
If iControl = 1 Then
    Application.DisplayAlerts = False
    wsCSV.Copy
    ActiveWorkbook.SaveAs Filename:=sDestin & "\" & sShName & ".csv", FileFormat:=xlCSV, CreateBackup:=True
    ActiveWorkbook.Close SaveChanges:=False
    Application.DisplayAlerts = True
End If

无论如何,当我继续执行代码时,SaveAs 方法开始创建“无限”文件,直到它占用了我所有的磁盘空间。我不知道怎么可能,因为文件有 6 行和 3 列,所以它应该有 1-2 kb。我必须手动停止该过程。有什么想法吗?我在另一个宏中尝试了这段代码,它工作正常。

谢谢!

【问题讨论】:

注释掉Application.DisplayAlerts = False 行,直到它正常工作——它可能隐藏了一些有用的信息。在调试模式下单步执行您的代码以查看发生了什么。考虑到您提供的代码有多么小,我猜无论wsCSV 是什么,它比您想象的要大得多 FreeMan:注释掉警报声明没有帮助,我之前考虑过这个选项。 wsCSV 是一个小型工作表,其值粘贴在 A1:C6 中。当我打开创建的 csv 文件时,即使它只填充了这些值,它的大小也有很多 GB(如果我很快停止该过程) 评论该行不会修复任何事情,但最好检查一下它是否隐藏了任何可以告诉你发生了什么的警报 - 它总是调试的第一步。您是在 Excel 中还是在记事本中打开 .CSV 来查看它?如果在 Excel 中,请点击 Ctrl-End 以查看最后使用的单元格是什么。尝试在记事本(或记事本++ 或其他文本编辑器 - 多 GiB 对记事本来说可能太大),看看最后是否有某种意外的随机垃圾。此外,请使用Ctrl-End 确保wsCSV 仅与您认为的一样满。 是的,这已经奏效了!我不知道为什么,但是使用 Ctrl-End 我得到了 wsCSV 中的所有单元格都被使用(尽管其中只有少数包含值)。重置 wsCSV 工作表确实有效。谢谢! 【参考方案1】:

确保您的wsCSV 工作表确实如您所想的那样为空。使用 Ctrl-End 查看最后使用的单元格是什么,并在必要时清理它。

【讨论】:

以上是关于VBA:SaveAs 方法创建无限的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

Powerpoint 文件的 VBA SaveAs 方法存在问题

csv转excel,用vba实现

使用 VBA 将电子表格保存为 *.csv 时出现问题

对象'_Workbook'的方法'SaveAs'失败VBA

VSTO SaveAs 文件被锁定

尝试使用 .SaveAs VBA 函数时出现方法错误