【问题标题】:Parse through excel workbooks and save specific tabs as .csv files解析 excel 工作簿并将特定选项卡保存为 .csv 文件
【发布时间】:2015-12-25 02:37:04
【问题描述】:

我需要帮助将 excel 工作簿中的特定选项卡保存为 1) csv 文件和 2) 以它们所源自的文件命名的文件。

到目前为止,我有这个可以从单个工作簿中取出正确的选项卡并将其保存为 .csv 文件。

Sub Sheet_SaveAs()
 Dim wb As Workbook
 Sheets("SheetName").Copy      
 Set wb = ActiveWorkbook      
 With wb
   .SaveAs ThisWorkbook.Path & "\SheetName.csv"
   '.Close False
 End With
End Sub

如何重命名“SheetName”,以便文件另存为,例如 Workbook1SheetName、Workbook2SheetName 等?

我想在一个包含很多很多 excel 文件的文件夹中循环这个函数,所以新的 .csv 文件需要唯一的名称。

我在网上找到了这个,它显示了如何使用 VBA 循环,http://www.ozgrid.com/VBA/loop-through.htm。理论上,只要每个 .csv 文件可以有一个唯一的名称,它就应该与我上面的代码一起使用。如果我错了,请纠正我。

感谢您的帮助。

【问题讨论】:

    标签: vba excel loops csv


    【解决方案1】:

    正如您所发现的,当您复制没有目的地的工作表时,您最终会得到一个由工作表副本填充的新工作簿。新工作簿在 VBA 环境中变为 ActiveWorkbook property。要将工作簿另存为 CSV 文件,您需要检索该新工作簿中唯一工作表的 Worksheet .Name property

    Sub All_Sheet_SaveAs_CSV()
        Dim w As Long, wb As Workbook
        Dim fp As String, fn As String
    
        On Error GoTo bm_Safe_Exit
        'Application.ScreenUpdating = False   'stop screen flashing
        Application.DisplayAlerts = False    'stop confirmation alerts
    
        'start with a reference to ThisWorkbook
        With ThisWorkbook
            fp = .Path
            'cycle through each of the worksheets
            For w = 1 To Worksheets.Count
                With Worksheets(w)
                    .Copy
                    'the ActiveWorkbook is now the new workbook populated with a copy of the current worksheet
                    With ActiveWorkbook
                        fn = .Worksheets(1).Name
                        .SaveAs Filename:=fp & Chr(92) & fn, FileFormat:=xlCSV
                        .Close savechanges:=False   '<~~ already saved in line above
                    End With
                End With
            Next w
        End With
    
    bm_Safe_Exit:
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    
    End Sub
    

    请注意,打开.DisplayAlerts 将关闭您通常会收到的警告。虽然这对 CSV 文件格式很有帮助,但如果您尝试覆盖文件,它也不会警告您。

    文件格式参数为xlCSVWorkbook.SaveAs method 将提供正确的文件扩展名。无需将其作为文件名的一部分。

    如果要接收导出到 CSV 过程的特定工作表数量有限,则可以循环使用一组工作表名称而不是工作表索引位置。

    Sub Specific_Sheets_SaveAs_CSV()
        Dim v As Long, vWSs As Variant
        Dim fp As String, fn As String
    
        On Error GoTo bm_Safe_Exit
        'Application.ScreenUpdating = False   'stop screen flashing
        Application.DisplayAlerts = False    'stop confirmation alerts
    
        vWSs = Array("Sheet1", "Sheet3", "Sheet5")
    
        'start with a reference to ThisWorkbook
        With ThisWorkbook
            fp = .Path
            'cycle through each of the worksheets
            For v = LBound(vWSs) To UBound(vWSs)
                With Worksheets(vWSs(v))
                    .Copy
                    'the ActiveWorkbook is now the new workbook populated with a copy of the current worksheet
                    With ActiveWorkbook
                        fn = .Worksheets(1).Name
                        .SaveAs Filename:=fp & Chr(92) & fn, FileFormat:=xlCSV
                        .Close savechanges:=False   '<~~ already saved in line above
                    End With
                End With
            Next v
        End With
    
    bm_Safe_Exit:
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    
    End Sub
    

    【讨论】:

    • 感谢您提供添加文件扩展名的正确方法。您的代码运行完美,但是如何从文件夹中的所有工作簿中隔离特定选项卡(我假设涉及某种循环),以及如何根据它们所源自的文件重命名每个选项卡?抱歉,如果你已经解释了如何做到这一点,我对 VBA 很满意。
    • 我已将 sn-p 合并到上面的完整子过程中。您只需编辑数组分配并提供要导出的工作表名称。
    • 哦,我明白了!我看到的问题是每个工作簿中的工作表具有相同的名称,而我有超过 100 个工作簿。还是我误解了,我可以在数组赋值中提供重命名?
    • 您可以使用thisworkbook.fullname获取工作簿的全名和路径。然后,您可以取下 .xlsx 或 .xlsm 并附加工作表名称。但是,您的问题中没有提到循环浏览工作簿,只是循环浏览工作表。
    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多