乐筑天下

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

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

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2009-5-15 17:42:00 | 显示全部楼层 |阅读模式
帮忙看一下我这个程序,刚一运行,就显示“当前范围内的声明重复”,这是在
中加载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
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 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    '获得多行文字的位置
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2009-5-15 17:54:00 | 显示全部楼层
这点问题是解决了,谢谢,虽然还是有问题,自己再找找
回复

使用道具 举报

0

主题

19

帖子

2

银币

初来乍到

Rank: 1

铜币
19
发表于 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
回复

使用道具 举报

2

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 2010-12-31 10:20: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    '获得多行文字的位置
这个地方重复定义了嘛,
Dim ptMin As Variant, ptMax As Variant
Dim ptMin As Variant, ptMax As Variant    '获得多行文字的位置
回复

使用道具 举报

8

主题

138

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2010-12-31 17:16:00 | 显示全部楼层
提醒一点,Mtext的textstring函数返回值包括格式符号你这样有些Mtext无法转成Text
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-1 03:34 , Processed in 0.920974 second(s), 65 queries .

© 2020-2025 乐筑天下

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