Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将excel工作表保存为文件名为+;使用VB的工作表名称_Vba_Excel_Csv - Fatal编程技术网

Vba 将excel工作表保存为文件名为+;使用VB的工作表名称

Vba 将excel工作表保存为文件名为+;使用VB的工作表名称,vba,excel,csv,Vba,Excel,Csv,我对VB编码非常陌生,我正在尝试将多个excel文件工作表保存到csv,我不知道如何对多个工作表执行此操作,但我找到了一种对单个文件执行此操作的方法。我在这个网站上找到了一些代码,这些代码对我正在尝试的工作非常有用,唯一的问题是文件是用工作表名称保存的,但我试图用原始文件和工作表名称保存它们,例如filename\u工作表名称,我自己尝试过,但不断出错,你能告诉我我做错了什么吗 我使用的代码如下: Public Sub SaveWorksheetsAsCsv() Dim WS As

我对VB编码非常陌生,我正在尝试将多个excel文件工作表保存到csv,我不知道如何对多个工作表执行此操作,但我找到了一种对单个文件执行此操作的方法。我在这个网站上找到了一些代码,这些代码对我正在尝试的工作非常有用,唯一的问题是文件是用工作表名称保存的,但我试图用原始文件和工作表名称保存它们,例如
filename\u工作表名称
,我自己尝试过,但不断出错,你能告诉我我做错了什么吗

我使用的代码如下:

   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 

这就是你想要的吗

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

我想这就是你想要的

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

最好的方法是记录宏并执行确切的步骤,然后查看它生成的VBA代码。然后,你可以去替换你想要的通用位(即文件名和其他内容)

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

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




这对我来说是可行的:-)

上面的代码只存在一个小缺陷,可以完美地工作;生成的文件未以.csv扩展名保存两天前

我在代码中添加了以下内容,并将我的文件保存为csv。谢谢你的这段代码,一切正常

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

嗨,Siddharth,我已经按照你的建议试过了,但是一直给我错误,但是别担心,另一个答案实际上比我要找的答案要多,非常感谢您提供的帮助:)当然没问题,但我想知道,当我上面发布的代码经过测试并符合您的要求时,您遇到了哪些错误:)单元格的格式如何?如果日期类型的单元格格式为DD/MM,则保存为CSV时,结果为DD/MM,并跳过年份部分。你能给我一些建议吗?是的,CSV就是这样工作的。它会剥离除显示为单元格值的纯文本以外的所有内容。我不太清楚你在问什么,但如果你打开一个新问题并在评论中链接到这里,我很乐意为你看一看。我已将Windows7行分隔符更改为“;”但此宏正在使用“,”分隔符保存.csv。有没有办法解决这个问题?你是说你已经试过这篇文章的内容了吗?我刚刚在我的Windows7机器上试用过,它成功了。@D.Tate,不用担心!不客气。谢谢你让我知道这对你很有用。感觉总是很好!别担心,SO上的所有代码都是免费使用的,您不需要做任何属性:-)这并没有提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论-您可以随时对自己的帖子发表评论,一旦您有足够的评论,您就可以发表评论。我将您的代码评论添加到了适当的位置。
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & ThisWorkbook.Name & "-" & WS.Name & ".csv", FileFormat:=xlCSV