[英]VBA Excel file to CSV, keeps CSV filename same as original workbook
我正在尝试找到一种快速的方法来将我的xlsx
文件另存为csv
文件,其文件名与xlsx
文件相同(只是csv
格式)。 我已经用快捷方式录制了一个宏,但是问题是,每当我尝试一个新文件时,它都将保存为与我录制初始宏时所使用的文件名相同的文件名(即,参见下文,可能是因为我在代码中标记为: 3WDL_1 (2014-08-07)10secDataTable sit.csv
)。 是否需要替换3WDL_1 (2014-08-07)10secDataTable sit.csv
,以使宏保存为与正在使用的实际工作簿相同的文件名。
所以基本上我有一个装满xlsx
文件的文件夹,并且我想在每个xslx
文件上使用快捷方式/宏将它们转换为与原始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
”来获取当前文件的名称,并将其连接到您具有新扩展名的文件名(不带文件扩展名)的变量中。 例如:
"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)
让我知道这是否适合您。
在将它们与标准字符串串联在一起之前,我会整理它们。 这是使用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
我不确定所有滚动都在做什么; 可能没有必要。 您可能需要添加数字格式命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.