明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 782|回复: 2

[VBA]cad多行文字控制符去除源代码

  [复制链接]
发表于 2022-7-7 16:24 | 显示全部楼层 |阅读模式
这是受之前的正则公式应用的启发,用vba把所有可能遇到的控制符进行了一个汇总,代码及操作基本能达到要求。需要的朋友们可以自己改为自己的一个函数
  1. '***********************************************
  2. '功能:vba对多行文字控制符进行去除,本函数采用vb标准的字符对比,非正则公式
  3. '函数名:getMTextUnformatString
  4. '作者:cx
  5. '***********************************************
  6. Public Function GetMTextUnformatString(MTextString As String) As String
  7.     Dim s As String, st As String
  8.     Dim s1() As String, s2() As String
  9.     Dim i As Long, m As Long
  10.     m = 27
  11.     ReDim s1(0 To m) As String
  12.     ReDim s2(0 To m) As String
  13.     s1(0) = "\":               s2(0) = "\x01"
  14.     s1(1) = "\{":               s2(1) = "\x02"
  15.     s1(2) = "\}":               s2(2) = "\x03"
  16.     s1(3) = "\f*;":             s2(3) = ""
  17.     s1(4) = "\C*;":             s2(4) = ""
  18.     s1(5) = "\H*;":             s2(5) = ""
  19.     s1(6) = "\T*;":             s2(6) = ""
  20.     s1(7) = "\Q*;":             s2(7) = ""
  21.     s1(8) = "\W*;":             s2(8) = ""
  22.     s1(9) = "\A*;":             s2(9) = ""
  23.     s1(10) = "\p*;":            s2(10) = ""
  24.     s1(11) = "\S^*;":           s2(11) = "$3$1"
  25.     s1(12) = "\S*;":            s2(12) = "$2$1"
  26.     s1(13) = "\S*^;":           s2(13) = "$2$2"
  27.     s1(14) = "\P":              s2(14) = vbCrLf
  28.     s1(15) = "\~":              s2(15) = ""
  29.     s1(16) = "\L":              s2(16) = ""
  30.     s1(17) = "\l":              s2(17) = ""
  31.     s1(18) = "\O":              s2(18) = ""
  32.     s1(19) = "\o":              s2(19) = ""
  33.     s1(20) = "\K":              s2(20) = ""
  34.     s1(21) = "\k":              s2(21) = ""
  35.     s1(19) = "\o":              s2(19) = ""
  36.     s1(20) = "\K":              s2(20) = ""
  37.     s1(21) = "\k":              s2(21) = ""
  38.     s1(22) = "{":               s2(22) = ""
  39.     s1(23) = "^}":              s2(23) = ""
  40.     s1(24) = "}":               s2(24) = ""
  41.     s1(25) = "\x01":            s2(25) = ""
  42.     s1(26) = "\x02":            s2(26) = "{"
  43.     s1(27) = "\x03":            s2(27) = "}"
  44.     'Dim RE As Object
  45.     'Set RE = ThisDrawing.Application.GetInterfaceObject("VBscript.RegExp")
  46.     'RE.IgnoreCase = True
  47.     'RE.Globa = True
  48.     Dim k As Long, k1 As Long
  49.     Dim SE As Variant
  50.     Dim st1 As String
  51.     s = MTextString: k1 = Len(s)
  52.     For i = 0 To m
  53.         Do
  54.             k = k1
  55.             st = StrMatch(s, s1(i))
  56.             If InStr(1, s2(i), "$") > 0 Then
  57.                 SE = Split(s2(i), "$")
  58.                 st1 = Mid(st, SE(1) + 1, Len(st) - SE(2) - SE(1))
  59.             Else
  60.                 st1 = s2(i)
  61.             End If
  62.             If InStr(1, s, st) > 0 Then s = Replace(s, st, st1)
  63.             k1 = Len(s)
  64.         Loop Until k1 = k
  65.         'Debug.Print s
  66.     Next i
  67.     'Set RE = Nothing
  68.     GetMTextUnformatString = s
  69. End Function

  70. Private Function StrMatch(Str As String, ss As String)
  71. '查str字符串中,匹配ss通配符的子串并返回
  72. Dim s As String, st As String
  73.     s = "*?": st = ss
  74. Dim i As Long, j As Long, k As Long
  75. Dim aSt As Variant

  76.     For i = 1 To Len(s)
  77.         Select Case Mid(s, i, 1)
  78.         Case "*"
  79.             If InStr(1, ss, "*") > 0 Then
  80.                 aSt = Split(ss, "*")
  81.                 j = InStr(1, Str, aSt(0))
  82.                 If j > 0 Then
  83.                     st = Mid(Str, j, InStr(j, Str, aSt(1)) - j + 1)
  84.                 End If
  85.             End If
  86.         Case "?"
  87.             If InStr(1, ss, "?") > 0 Then
  88.                 aSt = Split(ss, "?")
  89.                 j = InStr(1, Str, aSt(0))
  90.                 If j > 0 Then
  91.                     st = Mid(Str, j, InStr(j, Str, aSt(1)) - j + 1)
  92.                 End If
  93.             End If
  94.         Case Else

  95.         End Select
  96.     Next i
  97.     StrMatch = st
  98. End Function

  99. Sub m2t()
  100.     Dim mt As AcadEntity
  101.     Dim pnt As Variant
  102.     Dim Str As String
  103.     ThisDrawing.Utility.GetEntity mt, pnt, "getMtext:"
  104.     Str = mt.TextString
  105.     'Debug.Print Str
  106.     Str = GetMTextUnformatString(Str)
  107.     MsgBox Str
  108. End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-7-7 16:27 | 显示全部楼层
沙发先占上, 核心功能比较完善.
发表于 2022-7-28 20:30 | 显示全部楼层
谢谢分享                           
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-8 20:07 , Processed in 0.477638 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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