紫罗兰 发表于 2010-12-13 15:52:55

求助:修改单行文字的内容

看了“开发精彩实例教程”,自己也是试着编了一段程序,不过不知道怎么回事,没有作用啊。问题可能是出在"For ..next"循环那里,各位大虾能不能帮着看一下啊。
下面是我的部分代码:
Public Sub Text2()
   Dim TextSelect As AcadSelectionSet
   Dim filterType(0) As Integer
   Dim filterData(0)
   Dim adText As AcadText
   On Error Resume Next
   filterType(0) = 0: filterData(0) = "text"
   If Not IsNull(ThisDrawing.SelectionSets.Item("TextSelect")) Then
      Set TextSelect = ThisDrawing.SelectionSets.Item("TextSelect")
      TextSelect.Delete
   End If
   Set TextSelect = ThisDrawing.SelectionSets.Add("TextSelect")
   TextSelect.Select acSelectionSetAll, , , filterType, filterData
   For Each adText In TextSelect
            If InStr(adText.textString, "1.0") Then adText.textString = "1.6"
            If adText.textString = "350" Then adText.textString = "300"
   Next
End Sub

mccad 发表于 2010-12-13 19:19:09

你想问什么问题,程序你可以设断点调试,也可以通过加入debug.print语句来调试。

紫罗兰 发表于 2010-12-14 08:08:25

惭愧,问题没有说完整。我的问题是:就是运行上面的程序后,1.0 没有 改成1.6, 350也没有改成300。“开发精彩实例教程”中的源程序我运行后是可以的,很困惑。

紫罗兰 发表于 2010-12-14 11:23:56

If InStr(adText.textString, "1.0") Then adText.textString = "1.6"语句的问题弄清楚了,原来我要改的文字是Mtext,不是text。。不好意思。不过If adText.textString = "350" Then adText.textString = "300"怎么还是没作用呢,各位高手帮看一下呀~


Public Sub Text2()
   Dim TextSelect As AcadSelectionSet
   Dim filterType(0) As Integer
   Dim filterData(0)
   Dim adText As AcadMText
   On Error Resume Next
   filterType(0) = 0: filterData(0) = "Mtext"
   If Not IsNull(ThisDrawing.SelectionSets.Item("TextSelect")) Then
      Set TextSelect = ThisDrawing.SelectionSets.Item("TextSelect")
      TextSelect.Delete
   End If
   Set TextSelect = ThisDrawing.SelectionSets.Add("TextSelect")
   TextSelect.Select acSelectionSetAll, , , filterType, filterData
   For Each adText In TextSelect
            If InStr(adText.textString, "1.0") Then adText.textString = "1.6"
            If adText.textString = "350" Then adText.textString = "300"
   Next
End Sub

紫罗兰 发表于 2010-12-15 21:23:25

回复 mccad 的帖子

多谢关注~调来调去,If adText.textString = "350" Then adText.textString = "300"确实还没有作用,为什么If InStr(adText.textString, "1.0") Then adText.textString = "1.6"这句就可以呢?

mccad 发表于 2010-12-15 21:57:52

象这种情形下,你需要先用debug.print adText.textString 来查看字符串的内容,看是不是你所要的内容

紫罗兰 发表于 2010-12-16 08:51:01

回复 mccad 的帖子

多谢指点~刚才Degug了一下,发现确实如您所说,图上显示是 350 的多行文字,debug显示的是\fFangSong_GB2312|b0|i0|p34;350 ,怪不得呢。

mikewolf2k 发表于 2010-12-16 17:44:36

少用Mtext。Mtext里面带格式代码的。

紫罗兰 发表于 2010-12-17 15:46:48

回复 mikewolf2k 的帖子

多谢指点~你说的格式指的是“\fFangSong_GB2312|b0|i0|p34;350 ”中的红色部分是吧,虽然用InStr()可以获得这个标注文字,但这个确实比较讨厌。有没有更好的方法啊?

mikewolf2k 发表于 2010-12-20 10:12:34

把这个mtext拷出来炸掉变成单行文字,然后获得纯粹的文本,如何?
页: [1] 2
查看完整版本: 求助:修改单行文字的内容