乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 67|回复: 3

求助 VBA中如何求得多行字的实际内容

[复制链接]

3

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
21
发表于 2009-9-30 13:13:00 | 显示全部楼层 |阅读模式
在的使用中,不免要使用多行文字,但多行文字在VBA编程时有些问题却令我头昏脑胀,如下图

nlmmrkfulax.jpg

nlmmrkfulax.jpg


图中所示为一个多行文字,选中它然后使用TEXTSTRING属性,返回一组字符串如下:
\A1;{\H1.6x;\{A}\P{\LB}\P{\H1.6x;C;}\P{\fCorbel|b0|i0|c0|p34;D}\P{\C1;E}\PF\PG
其实这串字符串并不是给我们看的,而是针对CAD文字编辑器的,其中"\"是转义符,以标明多行字所使用的格式
例如:\P表示转行
      \A1;表示文字对齐的样式
。。。。。这里就不一一详述了,有兴趣的朋友可以在网上搜搜看,问题是否串字符串并不是我所需要的,我想要的是
{ABC;DEFG
差距比较遥远,大家有什么好办法呢?
求助 VBA中如何求得多行字的实际内容

dtrpdbxysqm.jpg

dtrpdbxysqm.jpg

回复

使用道具 举报

3

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
21
发表于 2009-10-3 12:03:00 | 显示全部楼层
转过去的链接中大家讨论得已经比较详细了,我比较喜欢mccad大虾的思路,但是我觉得他所提供的函数中有一点点瑕疵,最起码我用
"\A1;\{{\H1.6x;A}\P{\LB}\P{\H1.6x;C;}\P\pi0.999306,l2.99792,t7;{\fCorbel|b0|i0|c0|p34;D}\P\pi0,l0,tz;{\C1;E}\PF?\PG\\\Ph{\H0.7x;\S1/2;}\PJ{\H0.7x;\S2^;}\PK{\H0.7x;\S^2;}|\PL"
这个字符串作核试验的时候就不完全正确,而且稍显繁复,所以我重新总结了一下,得出下面的两个函数,请众位同好不吝指正
第一个是用RegExp来替换的自定义函数
  1. Public Function ReplaceByRegExp(ByVal Mystrig As String, ByVal TxtFind As String, ByVal TxtReplace As String)
  2.      Dim RE As Object
  3.      Set RE = ThisDrawing.Application.GetInterfaceObject("Vbscript.RegExp")
  4.      
  5.      RE.IgnoreCase = False
  6.      RE.Global = True
  7.      
  8.      RE.Pattern = TxtFind
  9.      ReplaceByRegExp = RE.Replace(Mystrig, TxtReplace)
  10.      Set RE = Nothing
  11.      
  12. End Function
第二个是用来清除多行字格式的函数
  1. Public Function MtextStringClearFormat(ByVal MyString As String) As String
  2.     MyString = ReplaceByRegExp(MyString, "\\{", Chr(1))
  3.     MyString = ReplaceByRegExp(MyString, "\\}", Chr(2))
  4.     MyString = ReplaceByRegExp(MyString, "\\", Chr(3))
  5.     MyString = ReplaceByRegExp(MyString, "\\S([^;]*?)(\^|#)([^;]*?);", "$1$3")
  6.     MyString = ReplaceByRegExp(MyString, "\\S([^;]*?);", "$1")
  7.     MyString = ReplaceByRegExp(MyString, "(\\P|\\O|\\o|\\L|\\l|\{|\})", "")
  8.     MyString = ReplaceByRegExp(MyString, "\\[^;]*?;", "")
  9.     MyString = ReplaceByRegExp(MyString, "\x01", "{")
  10.     MyString = ReplaceByRegExp(MyString, "\x02", "}")
  11.     MyString = ReplaceByRegExp(MyString, "\x03", "")
  12.     MtextStringClearFormat = Trim(MyString)
  13. End Function
最后写一个测试过程
  1. Sub TEST()
  2.     Dim TxtOld As String
  3.     Dim TxtNew As String
  4.     TxtOld = "\A1;\{{\H1.6x;A}\P{\LB}\P{\H1.6x;C;}\P\pi0.999306,l2.99792,t7;{\fCorbel|b0|i0|c0|p34;D}\P\pi0,l0,tz;{\C1;E}\PF?\PG\\\Ph{\H0.7x;\S1/2;}\PJ{\H0.7x;\S2^;}\PK{\H0.7x;\S^2;}|\PL"
  5.     TxtNew = MtextStringClearFormat(TxtOld)
  6.    
  7. End Sub
大家再帮我用其它的字符串测试一下,看看是不是有所遗漏或是BUG,谢谢了
回复

使用道具 举报

3

主题

41

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2009-10-5 21:34:00 | 显示全部楼层
编了一些自己常用到的CAD相关的函数,刚好有这个从MText提取文本的。我是在WinXPSP2+VB6SP4+CAD2006下调试的,可能有BUG也说不定。如果觉得能用上就下载吧。使用方法如下面这个函数:
Sub test()
Dim a As Object, strTmp$
    Set a = CreateObject("ZWCADComm.ZWCADPublic")
    strTmp = a.GetTextFromMText("\A1;{\H1.6x;\{A}\P{\LB}\P{\H1.6x;C;}\P{\fCorbel|b0|i0|c0|p34;D}\P{\C1;E}\PF\PG")
End Sub
也可以在工程中引用,然后用
dim a as new ZWCADComm.ZWCADPublic
这样的语句来引用。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:ym4t3t1yibm.rar 
下载次数:0  文件大小:16.19 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2010-5-7 08:12:00 | 显示全部楼层
请问要如何列出文件中的所有单行文字与多行文字的内容信息。
能不能给段完整代码?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 12:57 , Processed in 1.212677 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表