VBA Excel文件为CSV,保留CSV文件名与原始工作簿相同

时间:2015-04-26 07:07:19

标签: excel vba excel-vba csv filenames

我正在尝试找到一种快速方法,将xlsx个文件保存为csv个文件,文件名与xlsx文件相同(只有csv格式)。我已经记录了一个带有快捷方式的宏,但问题是,每当我尝试使用新文件时,它都会保存为我记录的初始宏的相同文件名(即见下文,可能是因为我在代码中标记的文件为: 3WDL_1 (2014-08-07)10secDataTable sit.csv)。是否需要替换3WDL_1 (2014-08-07)10secDataTable sit.csv以使宏保存与我正在使用的实际工作簿具有相同的文件名。

所以基本上我有一个充满xlsx个文件的文件夹,我想在每个xslx文件上使用快捷方式/宏将它们转换为完全相同的csv个文件将其命名为原始xlsx文件,并保存到同一文件夹中。

Sub xlstocsv()
'
' xlstocsv Macro
'
' Keyboard Shortcut: Ctrl+a
'
    Columns("A:A").Select
    Range("A41243").Activate
    Selection.NumberFormat = "0.00"
    ActiveWindow.ScrollRow = 41231
    ActiveWindow.ScrollRow = 41090
    ActiveWindow.ScrollRow = 39753
    ActiveWindow.ScrollRow = 30184
    ActiveWindow.ScrollRow = 26385
    ActiveWindow.ScrollRow = 13017
    ActiveWindow.ScrollRow = 10976
    ActiveWindow.ScrollRow = 8162
    ActiveWindow.ScrollRow = 4785
    ActiveWindow.ScrollRow = 4503
    ActiveWindow.ScrollRow = 774
    ActiveWindow.ScrollRow = 1
    Range("A1").Select
    ChDir "C:\Users\paddy\Desktop\NEW CSV files whole CGM date ok!"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Users\paddy\Desktop\NEW CSV files whole CGM date ok!\3WDL_1 (2014-08-07)10secDataTable sit.csv" _
        , FileFormat:=xlCSVMac, CreateBackup:=False
End Sub

3 个答案:

答案 0 :(得分:1)

目前,您已经在" ActiveWorkbook.SaveAs"之后获得了硬编码的文件名。所以用硬编码的名字保存一切。

我想你会想要使用" ActiveWorkbook.Name"获取当前文件的名称并将其连接到"文件名"具有新扩展名的变量(没有文件扩展名)。例如:

"C:\Users\padd\Desktop\NEW CSV...ok!\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & ".csv")

这是一种肮脏的方式,但它应该满足您的需求。另外,根据您使用的Excel版本,我认为您可能需要使用" ThisWorkbook"而不是" ActiveWorkbook"但我不确定。

答案 1 :(得分:0)

在保存为csv之前,请获取xls文件的名称。您可以使用ActiveWorkbook.Name属性。假设该文件名为something.xls(而非.xlsx),请尝试以下操作:

Sub Macro1()
    XLSName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)
    ActiveWorkbook.SaveAs Filename:="C:\Users\Username\Desktop\" & XLSName & ".csv", _
        FileFormat:=xlCSV, CreateBackup:=False
End Sub

这会拉出工作簿名称,切断最后4个字符(“。xls”),然后运行另存为“.csv”的“另存为”命令。如果您的Excel文件具有xlsx扩展名,请将第2行更改为:

XLSName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)

请告诉我这是否适合您。

答案 2 :(得分:0)

我会在用标准字符串连接将它们拼接在一起之前组织这些片段。以下是使用InStr function的代码的相关部分。

Dim myPath As String, myFileName As String

myPath = "C:\Users\paddy\Desktop\NEW CSV files whole CGM date ok!"
'possible alternate that gets the environment variable USERNAME
'myPath = "C:\Users\" & Environ("USERNAME") & "\Desktop\NEW CSV files whole CGM date ok!"

'check if the folder exists and if not create it
If Not CBool(Len(Dir(myPath, vbDirectory))) Then _
    MkDir Path:=myPath


myFileName = Left(ActiveWorkbook.Name, InStr(1, ActiveWorkbook.Name, ".xl", vbTextCompare) - 1)
'you don't actually need .csv as the extension if you are explicitly saving as xlCSV or xlCSVMac but here is an alternate
'myFileName = Left(ActiveWorkbook.Name, InStr(1, ActiveWorkbook.Name, ".xl", vbTextCompare) - 1) & ".csv"

'output to the VBE's Immediate window for checking later in case there is a problem
Debug.Print myPath & Chr(92) & myFileName

' the backslash is ASCII character 92
ActiveWorkbook.SaveAs Filename:=myPath & Chr(92) & myFileName, _
    FileFormat:=xlCSVMac, CreateBackup:=False

我不确定滚动的内容是什么;它可能没有必要。您可能希望添加数字格式化命令。