ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 卧美吻花

[已解决]VBA更改txt文件“编码格式”为UTF-8?18楼附答谢文件

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-7 22:29 | 显示全部楼层
刚刚切换操作系统到WinXP SP2,Office版本是2003(11.8105.8107)SP2
运行程序,结果跟11楼是一样的
这一句是不是写错了?
我不知道该怎么改啊!
[此贴子已经被作者于2006-11-7 22:29:48编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-7 22:42 | 显示全部楼层

你需要引用 ADO对象:

ADO   (ActiveX   Data   Objects),Microsoft   ActiveX   Data   Objects   Library,其“引用”名为:Microsoft   ActiveX   Data   Objects   2.x   Library    

TA的精华主题

TA的得分主题

发表于 2006-11-7 22:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

OpenAsTextStream 方法

打开指定的文件并返回一个 TextStream 对象,可以通过这个对象对文件进行读、写或追加。

object.OpenAsTextStream([iomode, [format]])

参数

object
必选项。应为 File 对象的名称。
iomode
可选项。指明输入/输出的模式。可以是三个常数之一: ForReadingForWritingForAppending
format
可选项。使用三态值中的一个来指明打开文件的格式。如果忽略,文件将以 ASCII 格式打开。

设置

iomode 参数可以是下列设置中的任一种:

常数描述
ForReading1以只读方式打开文件。不能写这个文件。
ForWriting2以写方式打开文件。如果存在同名的文件,那么它以前的内容将被覆盖。
ForAppending8打开文件并从文件末尾开始写。

format 参数可以是下列设置中的任一种:

常数描述
TristateUseDefault-2使用系统默认值打开文件。
TristateTrue-1以 Unicode 方式打开文件。
TristateFalse 0以 ASCII 方式打开文件。

说明

OpenAsTextStream 方法提供的功能和 FileSystemObject 的 OpenTextFile 方法一样。另外, OpenAsTextStream 方法可以用来写文件。

下面的代码说明了 OpenAsTextStream 方法的用法:

[VBScript]
Function TextStreamTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
   Dim fso, f, ts
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.CreateTextFile "test1.txt"   ' Create a file.
   Set f = fso.GetFile("test1.txt")
   Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
   ts.Write "Hello World"
   ts.Close
   Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
   TextStreamTest = ts.ReadLine
   ts.Close
End Function

在VBA中好象就只能用系统默认编码、Unicode、ASCII读写文件了。若用VS编写个辅助程序读写文件,就可以使用近百个代码页读写文件了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-7 23:07 | 显示全部楼层
回13楼的北狼斑竹:
刚刚引用了ADO对象(引用了MSADO2.5,引用MSADO2.0后运行程序会报错),[em04]新手啊,您多包涵
现在运行程序不报错了,可是
程序生成的文件还是ANSI编码的
不是UTF-8[em06]
请问何解?
[此贴子已经被作者于2006-11-7 23:09:32编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-7 23:24 | 显示全部楼层
回14楼的苹果兄
您说的OpenAsTextStream 的方法我应该加在那个地方呢?我自己试了一下,不成功
对不起,偶确实太菜了[em04]
另外,Function 在VBA里应该怎样调用啊?
 
下面是我的代码,该如何修改?
Private Sub CommandButton1_Click()
   Application.ScreenUpdating = False
           For ii = 3 To 5000
            Cells(ii, 14).Select
            If ActiveCell.Value <> "" Then
               a = ii
            End If
          Next ii
    Dim FullName As String
    FullName = "d:\dbf\" & Cells(1, 1)
    FullName.OpenAsTextStream (8)   '这里应该如何设置??
    For i = 1 To a
     Print #1, Cells(i, 14)
    Next i
    Close #1
Application.ScreenUpdating = ture
Range("B2").Select
End Sub
[此贴子已经被作者于2006-11-7 23:42:08编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-8 00:15 | 显示全部楼层

从“FullName.OpenAsTextStream (8)   '这里应该如何设置??”以下至“ Close #1”改为:

    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fso, f, ts
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateTextFile FullName     ' Create a file.
    Set f = fso.GetFile(FullName)
    Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)     '以系统默认编码写入文件
    For i = 1 To a
        ts.write Cells(i, 14)
    Next i
    ts.Close


TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-8 00:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
使用苹果兄提供的代码,程序保存txt文件成功!!!
说谢谢太俗了,也不能表达我激动的心情
 
这里提供一个我做的小东西给大家玩玩吧,希望大家喜欢
这个东西是给GoogleEarth用的实用版的中国地标
已经精确到了乡镇一级
 
原来限制了上传大小为250K[em04],只能分4卷了
 
XDPMEQpM.rar (159.51 KB, 下载次数: 261)

jJ7XGXpH.rar

243.16 KB, 下载次数: 158

[在线等]怎样让VBA更改已有的txt文件“编码格式”为UTF-8?

0CqNXpgs.rar

243.16 KB, 下载次数: 128

[在线等]怎样让VBA更改已有的txt文件“编码格式”为UTF-8?

EPk8bhFw.rar

243.16 KB, 下载次数: 146

[在线等]怎样让VBA更改已有的txt文件“编码格式”为UTF-8?

TA的精华主题

TA的得分主题

发表于 2006-11-8 16:45 | 显示全部楼层

用API就可以解决.就象是内码转换一样的道理.

Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Const CP_UTF8 = 65001

Public Function UTF8_Encode(ByVal Text As String) As String
Dim sBuffer As String
Dim lLength As Long
   If Text <> "" Then
      lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(Text), -1, 0, 0, 0, 0)
      sBuffer = Space$(lLength)
      lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(Text), -1, StrPtr(sBuffer), Len(sBuffer), 0, 0)
      sBuffer = StrConv(sBuffer, vbUnicode)
      UTF8_Encode = Left$(sBuffer, lLength - 1)
   Else
      UTF8_Encode = ""
   End If
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-12-16 16:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-12-17 07:25 | 显示全部楼层
使用苹果兄的代码,我怎么就存不成utf-8呢?
卧兄可否把完整代码再贴一遍?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 17:12 , Processed in 0.037565 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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