我正在尝试找到一种快速方法,将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
答案 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
我不确定滚动的内容是什么;它可能没有必要。您可能希望添加数字格式化命令。