【问题标题】:Close copied worksheet when exporting into CSV导出为 CSV 时关闭复制的工作表
【发布时间】:2011-09-24 04:54:30
【问题描述】:

我尝试将 Excel 电子表格的每个工作表保存到 CSV 文件中。以下脚本完成了这项工作。 .Parent.Close savechanges:=False 行应该关闭创建的工作表,但是当取消注释时,脚本在第一张表之后停止。如果我注释该行,所有工作表都会被处理。

Dim newWks As Worksheet
Dim wks As Worksheet

For Each wks In ActiveWorkbook.Worksheets
wks.Copy 'to a new workbook
Set newWks = ActiveSheet
With newWks
.SaveAs Filename:="C:\home\tmp\base\" & wks.Name & ".txt", FileFormat:=xlTextWindows
.Parent.Close savechanges:=False
End With
Next wks

MsgBox "done with: " & ActiveWorkbook.Name

【问题讨论】:

    标签: excel vba csv office-2010


    【解决方案1】:

    您正在关闭活动工作簿。如果您想关闭新创建的对象,请执行以下操作(经过测试,对我有用):

    Dim newWkb As Workbook
    Dim wks As Worksheet
    
    For Each wks In ActiveWorkbook.Worksheets
      wks.Copy 'to a new workbook
      Set newWkb = ActiveWorkbook
      With newWkb
        .SaveAs Filename:="C:\home\tmp\base\" & wks.Name & ".txt", FileFormat:=xlTextWindows
        newWkb.Close savechanges:=False
      End With
    Next wks
    
    MsgBox "done with: " & ActiveWorkbook.Name
    

    【讨论】:

    • 我认为您的代码和悉尼的代码做同样的事情,尽管您的代码更直接地标识了要关闭的工作簿。换句话说,“Set newWkb = ActiveWorkbook”与“Set newWks = ActiveSheet.Parent”相同,这实际上是Sydney 的代码所做的。你和悉尼的代码在 Excel 2010 中对我来说都很好。
    • 是的,我想唯一的区别是 SaveAs 是在原始工作表上执行的,而我的是 SaveAs 在新工作簿上的。所以,我不知道为什么它对他不起作用,但它现在起作用了!奇数。
    • 是的,直到阅读这篇文章,我才意识到您可以创建 Worksheet.SaveAs。我一直在 SO 上学到新东西。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2012-05-26
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多