明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2105|回复: 5

请高手指点一下本人编的小程序

[复制链接]
发表于 2009-5-15 17:42:00 | 显示全部楼层 |阅读模式
帮忙看一下我这个程序,刚一运行,就显示“当前范围内的声明重复”,这是在
AutoCAD中加载VBA的
谢谢了!
  1. Option Explicit
  2. Public Sub MtextToText()
  3.     On Error Resume Next
  4.    
  5.     Dim ptInsert As Variant
  6.     Dim txtStr As String
  7.     Dim height As Double
  8.     Dim width As Double
  9.    
  10.     '选择多行文字*********************************************
  11.     '安全创建选择集
  12.     Dim SSet As AcadSelectionSet
  13.     If Not IsNull(ThisDrawing.SelectionSets.Item("this")) Then
  14.         Set SSet = ThisDrawing.SelectionSets.Item("this")
  15.         SSet.Delete
  16.     End If
  17.     Set SSet = ThisDrawing.SelectionSets.Add("this")
  18.    
  19.     '定义过滤规则
  20.     Dim filterType(0) As Integer
  21.     Dim filterData(0) As Variant
  22.     filterType(0) = 0
  23.     filterData(0) = "Mtext"
  24.    
  25.     SSet.SelectOnScreen filterType, filterData
  26.    
  27.     '创建单行文字***************************************************************
  28.     Dim ptMin As Variant, ptMax As Variant
  29.     Dim objText As AcadText
  30.     Dim objMtext As AcadMText
  31.    
  32.     Dim i, j As Integer
  33.     Dim quantity As Integer            'quantity为Mtext的行数
  34.     Dim TextIndex() As Integer         'TextIndex()记录每行所在的位置
  35.     Dim tmpStr As String
  36.    
  37.     Dim ptMin As Variant, ptMax As Variant    '获得多行文字的位置
  38.    
  39.     For Each objMtext In SSet
  40.         '获得文字的主要参数
  41.       objMtext.GetBoundingBox ptMin, ptMax
  42.         txtStr = objMtext.TextString
  43.         height = objMtext.height
  44.         '找出Mtext共有几行
  45.         quantity = 1
  46.         For i = 1 To Len(Mtext)
  47.            If Mid(Mtext, i, 1) = "\p" Then quantity = quantity + 1
  48.         Next i
  49.    
  50.         '找出每行行首在Mtext的位置
  51.         ReDim TextIndex(quantity)
  52.         TextIndex(0) = 0
  53.         For j = 1 To quantity
  54.             For i = 1 To Len(Mtext)
  55.                 If Mid(Mtext, i, 1) = "\p" Then TextIndex(j) = i
  56.             Next i
  57.         Next j
  58.         TextIndex(j) = i
  59.         
  60.         '将Mtext转换为多行Text文字
  61.         For j = 0 To quantity - 1
  62.             tmpStr = Mid(txtStr, TextIndex(j) + 1, TextIndex(i + 1) - TextIndex(i) - 1)
  63.             ptInsert(0) = ptMin(0)
  64.             ptInsert(1) = ptMin(1) + (i + 1) * (ptMax(1) - ptMin(1)) / quantity
  65.             ptInsert(2) = ptMin(2)
  66.             
  67.             Set objText = ThisDrawing.ModelSpace.AddText(tmpStr, ptInsert, height)
  68.       
  69.         '调整单行文字的对齐方式
  70.         objText.InsertionPoint = ptInsert
  71.         objMtext.Delete  '删除文字
  72.     Next
  73.    
  74.     SSet.Delete
  75. End Sub
发表于 2009-5-15 17:50:00 | 显示全部楼层
    Dim ptMin As Variant, ptMax As Variant
    Dim objText As AcadText
    Dim objMtext As AcadMText
   
    Dim i, j As Integer
    Dim quantity As Integer            'quantity为Mtext的行数
    Dim TextIndex() As Integer         'TextIndex()记录每行所在的位置
    Dim tmpStr As String
   
    Dim ptMin As Variant, ptMax As Variant    '获得多行文字的位置
 楼主| 发表于 2009-5-15 17:54:00 | 显示全部楼层
这点问题是解决了,谢谢,虽然还是有问题,自己再找找
发表于 2010-8-3 15:14:00 | 显示全部楼层

你的创建选择集可能有问题,您可以看考下面的程序!

''''''安全创建选择集
On Error Resume Next
Dim SSet As AcadSelectionSet
If Not IsNull(docObj.SelectionSets.Item("Example")) Then
Set SSet = docObj.SelectionSets.Item("Example")
SSet.Delete   '及时删除不用的选择集非常重要
End If
Set SSet = docObj.SelectionSets.Add("Example")
''''''向选择集中添加实体
SSet.Select acSelectionSetCrossing, ptMin, ptMax
''''''将选择集中的实体添加到数组中
Dim objCollection() As Object
ReDim objCollection(SSet.Count - 1)
Dim i As Integer
For i = 0 To SSet.Count - 1
    Set objCollection(i) = SSet.Item(i)
Next i

发表于 2010-12-31 10:20:32 | 显示全部楼层
Dim ptMin As Variant, ptMax As Variant
    Dim objText As AcadText
    Dim objMtext As AcadMText
   
    Dim i, j As Integer
    Dim quantity As Integer            'quantity为Mtext的行数
    Dim TextIndex() As Integer         'TextIndex()记录每行所在的位置
    Dim tmpStr As String
   
    Dim ptMin As Variant, ptMax As Variant    '获得多行文字的位置
这个地方重复定义了嘛,
Dim ptMin As Variant, ptMax As Variant
Dim ptMin As Variant, ptMax As Variant    '获得多行文字的位置
发表于 2010-12-31 17:16:30 | 显示全部楼层
提醒一点,Mtext的textstring函数返回值包括格式符号你这样有些Mtext无法转成Text
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 20:34 , Processed in 0.163625 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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