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

我试图find一个快速的方式来保存我的xlsx文件作为csv文件与xlsx文件相同的文件名(只是在csv格式)。 我logging了一个macros的快捷方式,但问题是,每当我尝试一个新的文件,它保存为一个相同的文件名我logging最初的macros(即见下文,可能是因为我有代码标记为: 3WDL_1 (2014-08-07)10secDataTable sit.csv )。 有什么我需要replace3WDL_1 (2014-08-07)10secDataTable sit.csv与macros使用与我正在使用的实际工作簿相同的文件名保存保存。

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

 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 

现在,你已经在“ ActiveWorkbook.SaveAs ”之后得到了一个硬编码的文件名,所以它用硬编码的名字保存了所有的东西。

我想你会想使用“ ActiveWorkbook.Name ”来获取当前文件的名称,并将其连接到你有那里(没有文件扩展名)与新的扩展名的“文件名”variables。 例如:

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

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

在保存为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) 

让我知道这是否适合你。

在将它们与标准string连接拼接在一起之前,我会组织这些部分。 这里是使用InStr函数的代码的相关部分。

 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 

我不确定所有的滚动在做什么。 这可能是没有必要的。 您可能想要添加数字格式命令。