2023年11月25日发(作者:)
VBA:如何把EXCEL导出为txt?
本⽂链接:/xuemanqianshan/article/details/103134590
⼀些废话:对命题的思考和解题步骤
Q:为什么要导出⼀个sheet为txt ?
A:很多时候,很多程序只能读txt,能直接读excel的偏少
我思考这个问题的⼏个步骤,我打算从简单到复杂,分步骤实现
先试着把⼀个sheet导出为txt
接下来,我打算试试导出成其他格式
把多个sheet导出为多个其他⽂件?
然后考虑试试从txt等⽂件格式⾥导⼊
从多个⽂件导⼊到多张表
多个⽂件导⼊到⼀个EXCEL?
⼆ 代码过程
下⾯代码是我逐渐尝试的过程,⼀个问题⼀个问题的排查解决,⼀个⼩⽩新⼿的痛苦经历,哈哈
第1版:将excel的⼀个sheet导出为txt
EXCEL的导⼊导出,我想最简单的应该是,单独导⼀个sheet为txt,所以我从这开始⼊⼿
可运⾏的代码:
1. Sub daochu1()
2. '先做将1个sheet导出为txt
3. Sheets("sheet1").SaveAs ("")
4. MsgBox "导出完毕"
5. End Sub
Q1:可运⾏,但是为什么找不到txt⽂件?
A1:saveas 和 savecopyas 都需要指定⽂件名,路径,扩展名
如果不写⽂件路径,甚⾄写死的路径,⽂件也不会⾃动保存在当前的 ⼯作⽂件夹,(也就是worksheet所在的)
⽽且⽤saveas,你会发现,新⽣成了⼀个以你这个名字为新名字的EXCEL表
第2版:改进:加上⽂件保存路径
1. Sub daochu101()
2.
3. pyAs & ""
4. MsgBox Sheets("sheet1").Name & "保存完成"
5.
6.
7. End Sub
Q1: ⽤了下savecopyas,为了保存⼀个副本(另存为)
A1: 实际上,我发现saveas savecopyas 好像都是新建了⼀个EXCEL
差别是 saveas 直接打开这个新的EXCEL
savecopyas不打开copy的这个excel
Q2: 语法问题
A2:thisworkbook等可以⽤ saveas 或 savecopyas
但是 sheet层次的,只能⽤saveas,暂时也不知道原因?
Q3: 确实另存了⼀个txt,但是这样保存的txt是个乱码⽂件
应该是直接保存只能是EXCEL相同格式,⽐如 xlsx,xls,xlsm
如果这么写是没错的 pyAs & ""
如果这么写是没错的 pyAs & ""
不指定⽂件格式就会是乱码
⽂件保存格式影响较⼤,即使是.xls和原表格式不同,Windows打开也会有提⽰
本⽂件路径的写法
1. ⽅法1:不写,就是默认在当前⼯作⽬录下----在这⾥好像⾏不通?
2. ⽅法2:写引号括起来绝对路径,不推荐
3. ⽅法3:指代的绝对路径,是⽂件级别的,
4. 组合路径写法 & ""
第3版: 解决保存的txt是乱码的问题,需要⽤ fileformat
现在就查下如何能保存为⼀个txt,我先保证测试的Excel⾥其他sheet 保证只有⼀个sheet,⼀个个排除问题
这种⽅法是可以的
1. Sub daochu1txt()
2.
3. Filename:= & "" & & ".txt", FileFormat:=xlUnicodeText, CreateBackup:=False
4.
5.
6. End Sub
第2种写法也可以
但是保存的都是当前激活的这个sheet的内容,并不是把整个excel 都保存了
事实下,也不好吧,⼀个excel的多个sheet都保存到1个txt⾥吧?
1. Sub daochu1txt()
2.
3. Filename:= & "", FileFormat:=xlText, CreateBackup:=False
4.
5. End Sub
从这试验看出来,⽆论 workbook 还是worksheet 的saveas ,虽然语法都OK,但saveas好像都是针对的⼀个sheet
, CreateBackup:=False 可以省略,我现在并不知道什么意思
ActiveSheet 可替换为 sheets("sheet2")
第4版: 单个txt可以保存为txt,循环起来就可以保存多个sheet为txt了吧
上⾯的代码循环起来,就是可以把多个sheet存为多个txt了吧?于是我尝试了下
1. Sub daochu1txt()
2.
3. Dim sh As Worksheet
4.
5. For Each sh In eets
6. '错误写法 for each worksheet in thisworkbook 错误有2处
7. '变量不能⽤保留词
8. '从属关系之前学习过,worksheet属于worksheets,⽽不属于workbook
9.
10. Filename:= & "" & & ".txt", FileFormat:=xlUnicodeText, CreateBackup:=False
11.
12. 'worksheet saveas时必须是 FileFormat:=xlUnicodeText
13. 'workbook saveas时必须是 FileFormat:=xlText
14.
15. Next
16.
17. End Sub
三 总结
三 总结
saveas和 savecopyas 的语法
对象.⽅法
或 pyas
saveas 和 savecopyas 都需要指定⽂件名,路径,扩展名,必须含扩展名!.xls .txt等等
SaveAs 语法
SaveAs 可以⽀持 FileFormat,详情如下:
表达式.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution,
AddToMru, TextCodepage, TextVisualLayout, Local)
MSDN上有详细解释
/zh-cn/office/vba/api/?redirectedfrom=MSDN
语法:
必须把路径写清楚
有两种格式,括号或空格
saveas (路径.⽂件类型) 或 saveas 路径.⽂件类型
savecopyas (路径.⽂件类型) 或 savecopyas 路径.⽂件类型
如果saveas 路径.⽂件类型 保存的类型和源⽂件类型不同,也会新⽣成⼀个⽂件出来
saveas 是 把本⽂件直接 改名保存,但原来的EXCEL并没被改变,只是新打开了⼀个excel⽂件
saveas会直接打开这个新的EXCEL
savecopyas是另存为⼀个新⽂件,并且savecopyas不打开copy的这个另存为的⽂件。
实际上,我发现saveas savecopyas 好像都是新建了⼀个EXCEL,都不影响⽼的EXCEL
saveas 针对的⼀定是⼀个sheet
⽆论 还是worksheet .saveas ,虽然语法都OK,但saveas好像都是针对的⼀个sheet
savecopy可以把⼀次把整个EXCEL⽂件(多个SHEET),另存为⼀个新的EXCEL,或其他⽂件?
看起来 sheet 可以saveas 不能savecopyas,并且 FileFormat:=xlUnicodeText
⽽ workbook 可以⽤saveas 或 savecopyas,并且FileFormat:=xlText
四 其他未整理,⼀些学习资料还没学习---
问题3:怎么⽤VBA打开⼀个txt⽂件?没试好,先注释掉了
' le ("")
你⽤ saveas会新⽣成⼀个 这个名字的excel⽂件
你看看你现在操作的EXCEL名字变了没:个⼈⽂件 这样⼀个奇怪名字的exce
事实下,也不好吧,⼀个excel的多个sheet都保存到1个txt⾥吧?
FileFormat:=xlOpenXMLWorkbook
如果使⽤后缀,则使⽤带有open的那种格式
我有⼏个xls格式的⽂件,⽤saveas 成xlsx的格式,如下
saveas
结果当我点开新保存的⽂件时,提⽰我格式错误,或者后缀名错误,或者⽂件损坏。
然后这个提⽰跟我直接把后缀名xls改成xlsx是⼀样的,我在想saveas这个功能是不是就只是改了个后缀名啊,那我⽤宏的话,如何实现和菜单另存为⼀样的
功能呢?是我saveas少什么参数?
Sub W3()
Dim wb As Workbook
Set wb = ' 初次执⾏完此句代码会产⽣⼀个"⼯作簿1"并打开,下次产⽣'⼯作簿2',wb看不到可能只是过渡作⽤
("sheet1").Range("a1") = "abcd"
"D:" ' SaveAs另存为即把当前正在使⽤的⽂件关闭掉,另存到其它地⽅,原来的⽂件关闭不保存。保存后代码所在⼯作簿
和"D:"都是打开状态,不受任何影响,还有若要保存的地⽅已经有同名⽂件会提⽰已有是否替换,⽽SaveCopyAs不会提⽰会直接替换同名⽂件
End Sub
'5 excel⽂件保存和备份
Sub w5()
Dim wb As Workbook
Set wb = ThisWorkbook
pyAs "D:" ' ThisWorkbook不受影响仍是打开状态,但 "D:"是关闭状态,这点和SaveAs不同
End Sub
Sub 复制保存关闭()
Sheets("sheet2").Copy
= "复制"
‘默认路径下保存⼯作簿,⾃动重命名
End Sub
在该⽅法中使⽤的SAVE保存,save后⾯不能接参数,是将新建的⼯作簿直接保存在电脑默认的路径下,并且⾃动重命名,但是不会关闭保存的⼯作簿。如果前
两句注释掉,第三句仅仅是对该⼯作簿保存处理,相当于点击保存按钮!
Sub 复制保存关闭2()
Sheets("sheet2").Copy
= "复制"
‘默认路径下保存⼯作簿,⾃动重命名
"新建" ‘默认路径下保存⼯作簿,并命名为“新建”
"D:新建.xlsx" ‘在D盘下保存⼯作簿,并命名为“新建”
End Sub
该⽅法中使⽤的是saveas,在saveas后⾯可以接参数,⽐如“⼯作簿名称”或者“在某个地址路径下及⼯作簿名称”,如果存在同名⼯作簿,则会提⽰是否覆盖原
有⼯作簿?也可以不接参数,则是保存在默认路径下并⾃动重命名。保存的⼯作簿会关闭!上⾯的代码中会产⽣⼀个保存的未关闭的excel⽂件,应该是前两
句代码导致。
如果前两句注释掉,第3句直接正常运⾏(相当于复制原⼯作簿);第4句也是相当于复制原⼯作簿,只是改⼀下⼯作簿名字;第5句因为保存的是xlsx格式⽽出
错,改为xlsm就没事,也相当于复制原⼯作簿并修改⼯作簿名。此三句均是直接在对应路径下保存并关闭⼯作簿。
Sub 复制保存关闭3()
Sheets("sheet2").Copy
= "复制"
'pyAs '后⾯必须接参数,否则不能运⾏
pyAs "新建" '不指定⽂件格式,⾃动保存在默认路径下,并且是不识别格式⽂件
pyAs "新建.xlsx" '指定⽂件格式,⾃动保存在默认路径下
pyAs "D:新建.xlsx" '在指定路径下保存为指定格式的⽂件
End Sub
在使⽤savecopyas时,⾸先后⾯必须接参数,其次必须制定⽂件的保存格式,再者该⽅法保存的⽂件是直接在默认路径下或者指定的地址⾥保存并关闭该⽂
件(上⾯代码会产⽣⼀个未保存的excel⽂件,应该是前两句导致!),所以前两句注释掉依然可以正常运⾏,并且毫⽆提⽰!⾃动覆盖同名⼯作簿。
发布评论