excel宏(VBA)处理二进制数据,StrConv()转换成文本时出错。

有一个二进制文件,其中有一些数据。格式是一些文本(汉字或数字或字母),中间用二进制的0分隔(每条记录长度固定,文本长度不定,多余地方用0填充)。采用excel的宏对其进行... 有一个二进制文件,其中有一些数据。格式是一些文本(汉字或数字或字母),中间用二进制的0分隔(每条记录长度固定,文本长度不定,多余地方用0填充)。
采用excel的宏对其进行操作:
使用ADODB.stream对象对文件进行读取(二进制模式,文本模式遇到0就会截断),代码如下:
'使用ADODB.Stream对象,对注意下面的的注释
Dim s As Object
Set s = CreateObject("ADODB.stream")
s.Open '先打开对象,以后再load
s.Type = 2 '这是设置为二进制模式,2是文本模式,注意这两种模式的区别
s.LoadFromFile Filename '载入指定的文件
s.Position = 2056 '将文件指针移到2054字节处,下次读取时从2054读起(包括2054)
Binary = s.Readtext(500) '每次读出500个字节

由于记录长度可能不一样长(同一文件是一样长度,一般是114字节),只好每次读500字节,通过If Binary(i) = 0 Then来判断是否这个字符串结束,并将非0内容按byte赋值给另一个byte类型的变量bin2。
可是,当转换时:
tem_str = StrConv(Binary, vbUnicode)
程序总是提示:
运行时错误“13”:
类型不匹配

奇怪了!仔细看了这个函数的说明,可怎么都搞不定strconv()。
向个位大侠请教如何用vba对二进制数据进行操作。
上面的代码上传时有错误,是采用文本模式的,应该是二进制模式,代码应为:
s.Type = 1
Binary = s.Read(500)

进行转化时应该是bin2:
tem_str = StrConv(Bin2, vbUnicode)
测试过,如果这个时候strconv(binary,vbunicode)是能成功获得第一个字符串的。
运行时的代码没有以上错误
===============
奇怪了,刚才又测试了一下,在:mc = StrConv(bin2, vbUnicode)行设置了一个断点,程序运行到这里暂停时,在调试的“立即窗口”中输入mc = StrConv(bin2, vbUnicode)运行成功,msgbox(StrConv(bin2, vbUnicode))也能成功。但是继续运行就出错。
我晕!
展开
 我来答
yjhitxu1132
2012-03-10 · TA获得超过2001个赞
知道小有建树答主
回答量:1735
采纳率:0%
帮助的人:1003万
展开全部
你的Binary这个变量没有定义?是Variant?
更多追问追答
追问
我曾经定义过binary为byte。不定义类型也可以,第一次s.Read(500)时自动确定binary为byte类型。
现在关键是转换bin2时出问题。
追答
你试试dim  Binary(0 to 499) as byte
再转换应该没问题 binary 应该是个数组

你再看看tem_str = StrConv(Bin2, vbUnicode)
里面这个BIN2应该要定义为byte ,你应该是没有定义。不然不会出现类型不匹配的提示
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式