【问题标题】:Saving excel worksheet to CSV files with filename+worksheet name using VB [duplicate]使用VB将excel工作表保存为带有文件名+工作表名称的CSV文件[重复]
【发布时间】:2012-05-20 01:11:48
【问题描述】:

我是 VB 编码的新手,我正在尝试将多个 excel 文件工作表保存到 csv,我不知道如何为多个工作表执行此操作,但我找到了一种用于单个文件的方法。我在这个网站上找到了对我想要做的事情非常有用的代码,唯一的问题是文件是用工作表名称保存的,但我试图用原始文件和工作表名称保存它们,例如filename_worksheet name,我自己尝试过,但一直出错,请您指教我做错了什么?

我使用的代码如下:

   Public Sub SaveWorksheetsAsCsv()

   Dim WS As Excel.Worksheet
   Dim SaveToDirectory As String

   Dim CurrentWorkbook As String
   Dim CurrentFormat As Long

   CurrentWorkbook = ThisWorkbook.FullName
   CurrentFormat = ThisWorkbook.FileFormat
   ' Store current details for the workbook
   SaveToDirectory = "H:\test\"
   For Each WS In ThisWorkbook.Worksheets
   WS.SaveAs SaveToDirectory & WS.Name, xlCSV
   Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub 

【问题讨论】:

    标签: vba excel csv


    【解决方案1】:

    这是你正在尝试的吗?

    Option Explicit
    
    Public Sub SaveWorksheetsAsCsv()
        Dim WS As Worksheet
        Dim SaveToDirectory As String, newName As String
    
        SaveToDirectory = "H:\test\"
    
        For Each WS In ThisWorkbook.Worksheets
            newName = GetBookName(ThisWorkbook.Name) & "_" & WS.Name
            WS.Copy
            ActiveWorkbook.SaveAs SaveToDirectory & newName, xlCSV
            ActiveWorkbook.Close Savechanges:=False
        Next
    End Sub
    
    Function GetBookName(strwb As String) As String
        GetBookName = Left(strwb, (InStrRev(strwb, ".", -1, vbTextCompare) - 1))
    End Function
    

    【讨论】:

    • 嗨 Siddharth,我已按照您的建议尝试过,但一直给我错误,但不要担心其他答案实际上更符合我的要求,非常感谢您提供帮助 :)跨度>
    • 当然不是问题,但我想知道您遇到了什么错误,因为我在上面发布的代码已经过尝试和测试,可以满足您的需求:)
    【解决方案2】:

    我想这就是你想要的......

    Sub SaveWorksheetsAsCsv()
    
    Dim WS As Excel.Worksheet
    Dim SaveToDirectory As String
    
    Dim CurrentWorkbook As String
    Dim CurrentFormat As Long
    
    CurrentWorkbook = ThisWorkbook.FullName
    CurrentFormat = ThisWorkbook.FileFormat
    ' Store current details for the workbook
    SaveToDirectory = "H:\test\"
    
    For Each WS In Application.ActiveWorkbook.Worksheets
        WS.SaveAs SaveToDirectory & WS.Name, xlCSV
    Next
    
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
    Application.DisplayAlerts = True
    ' Temporarily turn alerts off to prevent the user being prompted
    '  about overwriting the original file.
    
    End Sub
    

    【讨论】:

    • 单元格的格式如何?如果日期类型的单元格格式为 DD/MM,则保存为 CSV 结果为 DD/MM 并跳过年份部分。可以请教吗?
    • 是的,这就是 CSV 的工作方式。除了显示为单元格值的纯文本之外,它会删除所有内容。我不确定您要问什么,但如果您打开一个新问题并在评论中将其链接到此处,我很乐意为您查看。
    • 我已将 Windows7 行分隔符更改为 ';'但是这个宏用','分隔符保存.csv。有没有办法解决这个问题?
    • 您是说您已经尝试过本文中的内容吗? social.technet.microsoft.com/wiki/contents/articles/… 我刚刚在我的 Windows 7 机器上试了一下,它成功了。
    • @D.Tate,不用担心!不客气。谢谢你让我知道它对你有用。这总感觉不错!不用担心,SO 上的所有代码都可以免费使用,您不需要做任何归属 :-)
    【解决方案3】:

    找出答案的最佳方法是记录宏并执行确切的步骤,然后查看它生成的 VBA 代码。然后你可以去替换你想要通用的位(即文件名和东西)

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题。我需要将工作表中的数据另存为单独的 CSV 文件。

      这是我在命令按钮后面的代码


      Private Sub cmdSave()
          Dim sFileName As String
          Dim WB As Workbook
      
          Application.DisplayAlerts = False
      
          sFileName = "MyFileName.csv"
          'Copy the contents of required sheet ready to paste into the new CSV
          Sheets(1).Range("A1:T85").Copy 'Define your own range
      
          'Open a new XLS workbook, save it as the file name
          Set WB = Workbooks.Add
          With WB
              .Title = "MyTitle"
              .Subject = "MySubject"
              .Sheets(1).Select
              ActiveSheet.Paste
              .SaveAs "MyDirectory\" & sFileName, xlCSV
              .Close
          End With
      
          Application.DisplayAlerts = True
      End Sub
      

      这对我有用:-)

      【讨论】:

        【解决方案5】:

        上面的代码完美运行,但有一个小缺陷;生成的文件不使用 .csv 扩展名保存。 – Tensigh 2 天前

        我在代码中添加了以下内容,并将我的文件保存为 csv。感谢这段代码。一切都按预期工作。

        ActiveWorkbook.SaveAs Filename:=SaveToDirectory & ThisWorkbook.Name & "-" & WS.Name & ".csv", FileFormat:=xlCSV
        

        【讨论】:

        • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
        • 我已将您的代码注释添加到适当的位置。
        猜你喜欢
        • 1970-01-01
        • 2013-08-27
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多