繁体   English   中英

VBA Excel文件转换为CSV,使CSV文件名与原始工作簿相同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM