Excel 简单VBA/Macro需要创建一个新的文本文件,其中包含活动工作表的内容,而无需更改文件名
我需要在不更改文件名的情况下将工作表中的数据导出到文本文件(即不执行“另存为”。如果文件名可以查看文件夹中以前类似的文件名并增加1位数(即:file_1.txt、file_2.txt等),那将是非常棒的Excel 简单VBA/Macro需要创建一个新的文本文件,其中包含活动工作表的内容,而无需更改文件名,excel,vba,Excel,Vba,我需要在不更改文件名的情况下将工作表中的数据导出到文本文件(即不执行“另存为”。如果文件名可以查看文件夹中以前类似的文件名并增加1位数(即:file_1.txt、file_2.txt等),那将是非常棒的 谢谢!!如果要避免更改excel文件的当前名称,只需保存当前工作表,而不是整个工作簿(与SaveAs函数相当的VBA是ActiveWorkbook.SaveAs,要仅保存当前工作表,请使用ActiveSheet.SaveAs) 可以使用以下宏: Sub Macro1() Applicat
谢谢!!如果要避免更改excel文件的当前名称,只需保存当前工作表,而不是整个工作簿(与SaveAs函数相当的VBA是
ActiveWorkbook.SaveAs
,要仅保存当前工作表,请使用ActiveSheet.SaveAs
)
可以使用以下宏:
Sub Macro1()
Application.DisplayAlerts = False
ActiveSheet.SaveAs Filename:="NewFile.txt", FileFormat:=xlTextWindows
Application.DisplayAlerts = True
End Sub
切换DisplayAlerts
属性可避免在给定文件已存在时显示消息框
如果要保存多个工作表,需要遍历
ActiveWorkbook
对象的Sheets
集合,并将每个工作表保存到单独的文件中。如果要避免更改excel文件的当前名称,只需保存当前工作表,而不是整个工作簿(与SaveAs函数等价的VBA是ActiveWorkbook.SaveAs
,要仅保存当前工作表,请使用ActiveSheet.SaveAs
)
可以使用以下宏:
Sub Macro1()
Application.DisplayAlerts = False
ActiveSheet.SaveAs Filename:="NewFile.txt", FileFormat:=xlTextWindows
Application.DisplayAlerts = True
End Sub
切换DisplayAlerts
属性可避免在给定文件已存在时显示消息框
如果要保存多张工作表,您需要遍历
ActiveWorkbook
对象的Sheets
集合,并将每张工作表保存到单独的文件中。您可以获得一个新的文件名,如下图所示,其中包括一个日期。如果您想添加有关要导出的内容的详细信息,您可以获得更完整的回答
Function NewFileName(ExportPath)
Dim fs As Object '' or As FileSytemObject if a reference to
'' Windows Script Host is added, in which case
'' the late binding can be removed.
Dim a As Boolean
Dim i As Integer
Dim NewFileTemp As string
Set fs = CreateObject("Scripting.FileSystemObject")
NewFileTemp = "CSV" & Format(Date(),"yyyymmdd") & ".csv"
a = fs.FileExists(ExportPath & NewFileTemp)
i = 1
Do While a
NewFileTemp = "CSV" & Format(Date(),"yyyymmdd") & "_" & i & ".csv"
a = fs.FileExists(ExportPath & NewFileTemp)
i = i + 1
If i > 9 Then
'' Nine seems enough times per day to be
'' exporting a table
NewFileTemp = ""
MsgBox "Too many attempts"
Exit Do
End If
Loop
NewFileName = NewFileTemp
End Function
您可以获得一个新的文件名,如下图所示,它包括一个日期。如果您想添加一些有关要导出的内容的详细信息,您可能会得到更完整的答案
Function NewFileName(ExportPath)
Dim fs As Object '' or As FileSytemObject if a reference to
'' Windows Script Host is added, in which case
'' the late binding can be removed.
Dim a As Boolean
Dim i As Integer
Dim NewFileTemp As string
Set fs = CreateObject("Scripting.FileSystemObject")
NewFileTemp = "CSV" & Format(Date(),"yyyymmdd") & ".csv"
a = fs.FileExists(ExportPath & NewFileTemp)
i = 1
Do While a
NewFileTemp = "CSV" & Format(Date(),"yyyymmdd") & "_" & i & ".csv"
a = fs.FileExists(ExportPath & NewFileTemp)
i = i + 1
If i > 9 Then
'' Nine seems enough times per day to be
'' exporting a table
NewFileTemp = ""
MsgBox "Too many attempts"
Exit Do
End If
Loop
NewFileName = NewFileTemp
End Function
有可能,我做了类似的事情。你在哪里遇到问题?你需要导出整个工作表还是只导出部分数据?有可能,我做了类似的事情。你在哪里遇到问题?你需要导出整个工作表还是只导出部分数据?对于John的需要,NewFileTemp将是不适合添加ActiveSheet.Name-尽管这可能会生成无效的文件名。例如NewFileTemp=“CSV”和Format(Date(),“yyyymmdd”)&ActiveSheet.Name&“\ux”&i&“.CSV”我认为避免使用无效名称更安全,只有在添加了确保工作表名称安全的代码时,才应包含工作表名称,regex可能适合。对于John的需要,添加ActiveSheet.name会使NewFileTemp受益-尽管这可能会生成无效的文件名。例如,NewFileTemp=“CSV”&Format(Date(),“yyyymmdd”)&ActiveSheet.Name&“”&i&“.csv”我认为避免使用无效名称更安全,只有在添加了确保工作表名称安全的代码时,才应包含工作表名称,正则表达式可能适用。