ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 746|回复: 7

[已解决] vba组合单元格内容输出的txt如何强制为utf-8?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-15 05:26 | 显示全部楼层 |阅读模式
本帖最后由 tifaff 于 2020-2-15 22:09 编辑

想把
a2:d2的内容按每一个单元格为一行存到一个txt
a3:d3的内容按每一个单元格为一行存到一个txt
....如此类推到
a999:d999


问题.png


我的代码能输出txt,但是为gb2312,因为内容含中英日韩等多国语言文字会乱码,怎样才能让输出的txt为utf-8?
搜了论坛,看见好几个方法,但把对方代码搬来自己的就出错了,希望能在这个代码基础上修改,因为目前我的代码可以灵活在单元格内容前后添加自己的文字和换行数,谢谢!
  1. Sub comeout2()

  2. Application.ScreenUpdating = True
  3. n = Range("a65536").End(xlUp).Row '检测A列总行数
  4. arr = Range("a2:i" & n) '存到数组,提升速度
  5. For i = 1 To n - 1 '循环输出
  6. outstr = ""

  7.     sname = arr(i, 1)
  8.         
  9.     outstr = "文章标题:" & arr(i, 1)  
  10.    
  11.     If Len(arr(i, 2)) > 0 Then     '如果内容不是为空的话,就组合内容
  12.     outstr = outstr & vbCrLf & vbCrLf & arr(i, 2)   'vbCrLf 是换行的意思
  13.     End If
  14.   
  15.     If Len(arr(i, 3)) > 0 Then
  16.     outstr = outstr & vbCrLf & vbCrLf & arr(i, 3)
  17.     End If

  18.      If Len(arr(i, 4)) > 0 Then
  19.     outstr = outstr & vbCrLf & vbCrLf & arr(i, 4)
  20.     End If

  21.     FullName = ThisWorkbook.Path & "" & sname & ".txt"
  22.     Open FullName For Output As #1
  23.     Print #1, outstr;
  24.     Close #1

  25. Next

  26. Application.ScreenUpdating = True
  27. MsgBox "导出完毕"
  28. End Sub
复制代码




TA的精华主题

TA的得分主题

发表于 2020-2-15 10:16 | 显示全部楼层
用fso的方式写入文本。createtextfile的第三参数设置为true即可。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-15 14:24 | 显示全部楼层
fxl447098457 发表于 2020-2-15 10:16
用fso的方式写入文本。createtextfile的第三参数设置为true即可。

找到版主类似的解答,但套用他的代码出来的txt是 ucs-2le 编码的(查了一下是ms的习惯),虽然能正确显示他国语言字符,但因后续我还需要批量处理txt,而很多程序都不支持ucs-2,所以能不能强制为utf-8输出呢?谢谢回复

版主 huang1314wei的代码:

Sub CreateAfile()
        Dim fso, MyFile, arr, i%
        arr = Range("A1").CurrentRegion
        Set fso = CreateObject("Scripting.FileSystemObject")
        For i = 1 To UBound(arr)
            Set MyFile = fso.CreateTextFile(ThisWorkbook.Path & "" & arr(i, 1) & ".txt", True, True)
            MyFile.WriteLine arr(i, 1)
            MyFile.Close
        Next
End Sub

TA的精华主题

TA的得分主题

发表于 2020-2-15 15:57 | 显示全部楼层
tifaff 发表于 2020-2-15 14:24
找到版主类似的解答,但套用他的代码出来的txt是 ucs-2le 编码的(查了一下是ms的习惯),虽然能正确显示 ...


参考下这个。
Sub mm()
Dim s As String
s = [a1].Value
With CreateObject("adodb.stream")
.Mode = 3
.Type = 2
.Charset = "utf-8"
.Open
.WriteText s
.SaveToFile ThisWorkbook.Path & "\1.txt", 2
.Close
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-15 16:04 | 显示全部楼层
本帖最后由 tifaff 于 2020-2-15 16:06 编辑
fxl447098457 发表于 2020-2-15 15:57
参考下这个。
Sub mm()
Dim s As String

这个我很早就试过了,因为小白,不会套用(套上去各种出错),版主那个我摸索了半小时才试出来的。
不会语法,这个通过adodb.stream处理(很多人都提到这个方法),但是原代码只处理a1 一个单元格,我不懂怎么样转换为自己的数组,像上面自己代码那样通过 & (i, 1) & (i, 2)
把一行n个单元格组合在一起再送给 s 这个参数处理,烦请帮忙写一下,谢谢了。

TA的精华主题

TA的得分主题

发表于 2020-2-15 16:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你自己代码里面的outstr就是我发的代码里面的s.

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-15 22:08 | 显示全部楼层
fxl447098457 发表于 2020-2-15 16:18
你自己代码里面的outstr就是我发的代码里面的s.

十分感谢指导 各种组合尝试s与outstr之间相互代入 终于试出来了

TA的精华主题

TA的得分主题

发表于 2020-2-16 11:12 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 17:52 , Processed in 0.047117 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表