ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

已解决,非常非常感谢liucqa大侠!!!!! 深深困扰多日! 一个诡异的EXCEL VBA问题求指导!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-23 21:13 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:文本处理和正则
本帖最后由 veggieg 于 2012-2-24 20:22 编辑

求指导依据路径前台打开一个后缀为pcdmft并按CTRL+V黏贴剪贴板的VBA代码~!!这样应该可以的,大概需要调用API函数吧,比较深哦,希望各位高手、大侠、斑竹不吝指教,非常谢谢你们!! wierd.rar (8.71 KB, 下载次数: 42)

下面是需要这样操作的原因~~很诡异的哦~!
使用EXCEL VBA打开一个后缀为.pcdmft的文件(该类文件我已设置txt为默认打开方式),向其输入数据,但是真正运行打开后缀pcdmft的程序却无法打开了刚才输入数据的pcdmft文件了,提示无法识别的字符,经过检查,输入数据里的中文字符都无法识别。诡异的是我的眼睛怎么看都是一样的,看格式也是一样的~~(人直接感官的局限性啊)

仔细发现EXCEL导入的和手复制的pcdmft文件大小有0.05KB的差别。想不到是什么原因导致的!

如果把无法识别的后缀为.pcdmft文件内容复制到一个未被EXCEL打开的后缀为.pcdmft的文件里,则可被pcdmft的程序识别。看来是EXCEL打开.pcdmft文件时改变了里面的一些东西?还是导入数据时改变了其中的内部数据或者设置?(很奇怪pcdmft文件用TXT打开,去掉里面的所有源代码,它仍然有3字节的大小!)留给有热爱科学和具有研究精神的人研究了 ^^

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-23 21:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求指导依据路径前台打开一个TXT (前台打开)

之后用sendkeys  CTRL+V黏贴剪贴板的VBA代码~!!

大概需要调用API函数吧,比较深哦,希望各位高手、大侠、斑竹不吝指教,非常谢谢你们!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-23 22:01 | 显示全部楼层
求指导依据路径前台打开一个TXT (前台打开)的VBA代码 不胜感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-23 23:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-2-24 00:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Public Declare Function WideCharToMultiByte Lib "kernel32" ( _
        ByVal CodePage As Long, _
        ByVal dwFlags As Long, _
        ByVal lpWideCharStr As Long, _
        ByVal cchWideChar As Long, _
        ByRef lpMultiByteStr As Any, _
        ByVal cchMultiByte As Long, _
        ByVal lpDefaultChar As String, _
        ByVal lpUsedDefaultChar As Long) As Long

Public Const CP_UTF8 = 65001
Private Sub WriteOut(strPath As String, str As String)
    Dim lBufSize As Long
    Dim lRest As Long
    Dim bUTF8() As Byte
    Dim TLen As Long
   
    TLen = Len(str)
    lBufSize = TLen * 3 + 1
    ReDim bUTF8(lBufSize - 1)
    lRest = WideCharToMultiByte(CP_UTF8, 0, StrPtr(str), TLen, bUTF8(0), lBufSize, vbNullString, 0)
    If lRest Then
        lRest = lRest - 1
        ReDim Preserve bUTF8(lRest)
        Open strPath For Binary As #1
        Put #1, , bUTF8
        Close #1
    End If
End Sub

上面代码可以输出UTF-8格式,你看看能用不,我没试过

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-24 00:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
...........................悲剧了 问题太难了吗

TA的精华主题

TA的得分主题

发表于 2012-2-24 00:07 | 显示全部楼层
没什么神秘的,你的.pcdmft的格式是UTF-8。
VBA默认的操作编码内部是UNICODE,输出一般是ANSI/GB2312。你得用记事本-另存为UTF-8格式

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-24 00:45 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-24 09:03 | 显示全部楼层
FileCopy "D:\V&V\OOCL_I_DATA_2011\复制使用\复制使用.pcdmft", "D:\V&V\OOCL_I_DATA_2011\复制使用\复制使用1111.pcdmft"
   
    Open "D:\V&V\OOCL_I_DATA_2011\复制使用\复制使用1111.pcdmft" For Output As #1

    For iii = 1 To countstart
   
        Val = Cells(iii, 48)
        
        Print #1, Val
   
    Next
    Close #1

我之前采用非常笨的方法去希望保留这个pcdmft后缀文件的格式,
经过高手的指点已经可以不用这样麻烦了,而是直接创建一个txt
之后用excel输出utf-8格式,再保存就OK了!

可是我新手,虽经高人指导,由于基础浅薄,仍然不明白呢!
现贴出代码向高手求教应该如何修改!

求教直接创建一个txt之后

新建TXT后录入内容的代码我已经有了:
    For iii = 1 To countstart
   
        Val = Cells(iii, 48)
        
        Print #1, Val
   
    Next
    Close #1

求教用excel输出utf-8格式,再保存的代码,非常感谢啊!

诚心求指导!!谢谢谢谢!!

TA的精华主题

TA的得分主题

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 08:06 , Processed in 0.046571 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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