2023年11月25日发(作者:)

VBA:如何把EXCEL导出为txt

本⽂链接:/xuemanqianshan/article/details/103134590

⼀些废话:对命题的思考和解题步骤

Q:为什么要导出⼀个sheettxt

A:很多时候,很多程序只能读txt,能直接读excel的偏少

我思考这个问题的⼏个步骤,我打算从简单到复杂,分步骤实现

先试着把⼀个sheet导出为txt

接下来,我打算试试导出成其他格式

把多个sheet导出为多个其他⽂件?

然后考虑试试从txt等⽂件格式⾥导⼊

从多个⽂件导⼊到多张表

多个⽂件导⼊到⼀个EXCEL?

代码过程

下⾯代码是我逐渐尝试的过程,⼀个问题⼀个问题的排查解决,⼀个⼩⽩新⼿的痛苦经历,哈哈

1版:将excel的⼀个sheet导出为txt

EXCEL的导⼊导出,我想最简单的应该是,单独导⼀个sheettxt,所以我从这开始⼊⼿

可运⾏的代码:

1. Sub daochu1()

2. '先做将1sheet导出为txt

3. Sheets("sheet1").SaveAs ("")

4. MsgBox "导出完毕"

5. End Sub

Q1:可运⾏,但是为什么找不到txt⽂件?

A1saveas 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都保存到1txt⾥吧?

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,循环起来就可以保存多个sheettxt了吧

上⾯的代码循环起来,就是可以把多个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都保存到1txt⾥吧?

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⽂件,应该是前两句导致!),所以前两句注释掉依然可以正常运⾏,并且毫⽆提⽰!⾃动覆盖同名⼯作簿。