XJ_HE 发表于 2003-8-29 18:01:00

能否一次将所有文本的数值加上0.8,明总指点

本帖最后由 作者 于 2003-8-29 19:05:02 编辑

能否一次将所有文本的数值加上一定的值?

Private Sub CommandButton1_Click()
Dim s As AcadSelectionSet
Dim A As String, I As Single
Dim start As Integer
Dim ed As Integer
Dim s1 As String
Dim s2 As String
Dim ft(0) As Integer
Dim fl(0) As Variant
ft(0) = 0
fl(0) = "text"
Set s = ThisDrawing.SelectionSets.Add("a2a2121")
Me.Hide
s.SelectOnScreen ft, fl

Dim e As AcadText
For Each e In s
'将对象的字符给变量A
A = e.TextString
'获得截取字符串的首位置
start = InStr(1, A, "/")
'获得欲截取数据的结束位置
ed = InStr(1, A, "dBm")
'将前面的字符赋给S1
s1 = Mid(A, 1, start)
   '将后面的字符赋给S1
s2 = Mid(A, ed, 3)
'取出数据,并改变
I = Val(Mid(A, start + 1, ed - start))
I = I + 0.8
e.TextString = s1 & I & s2
e.Update
Next e
End Sub

字符串的格式:F1-A1/3.5dBm    楼层-天线/输出功率
                  F15-A1/-6.5dBm .....

要求,将输出功率加大0.8

请明总指点。

efan2000 发表于 2003-8-29 20:16:00

A = e.TextString
'获得截取字符串的首位置
start = InStr(1, A, "/")
'获得欲截取数据的结束位置
end = InStr(1, A, "dBm")
'将前面的字符赋给S1
s1 = Mid(A, 1, start)
   '将后面的字符赋给S1
s2 = Mid(A, ed)
'取出数据,并改变

'长度应该是end-start-1,如:F1-A1/3.5dBm,start为6,end为10。
'I应该定义为Double型,如3.5是实数。
   
I = Val(Mid(A, start + 1, end - start-1))
I = I + 0.8
e.TextString = s1 & I & s2
e.Update

XJ_HE 发表于 2003-8-30 10:42:00

谢谢指点。不过在运行过程中并没有发生错误。是不是它只把数据读到了 I中,而对于字符就自动截断了。

为什么要将 I 定义为DOUBLE?SINGLE不也是浮点小数吗?(SINGLE的运行速度更快一些啊)
而且在这里它并不与CAD的计量单位发生关系。只是一次简单的小数运算罢了。

efan2000 发表于 2003-8-30 16:52:00

这个是Val的用法,它试着截取字符串的前部分,将它转化成数值。但是如果对于“-”开头的,则不能转化。详细的用法可以看帮助文件。最好使用类型转化,比如CDbl。
定义为Single也可,从编程的习惯来说,I一般是定义为整型的,它是Integer的开头字母,容易识别。
页: [1]
查看完整版本: 能否一次将所有文本的数值加上0.8,明总指点