这样能不能解决问题:图号后面在加一位表示页码:D
你的方法是一样的,手动输入便不可取,因为它不能识别自身所处图纸集的位置,这个变量得来自CAD系统,而AutoDesk没有给出这个变量,郁闷! 如有高人路过,请留下你的墨宝!期待ing... 等啊等!等啊等!!到现在还没等到脚底板长毛的,哎!!~~~ 11楼做超链接的方法很不错啊可以借鉴 顶到上面去!为了让高人看看...... 看来这问题有些难啊! http://cid-deb0baea7ff17ed7.spaces.live.com/blog/cns!DEB0BAEA7FF17ED7!309.entry
采用VBA实现AutoCAD自动修改图的图号(页码)
问题描述:我这里有100张图,需要将这些图插入到最终报告中,报告中预留一些位置,需要修改各个图的图号(也就是页码),如个人工去改,很容易范错,而且改的头会昏掉.
实现方法:首先采用Word生成目录的方式将所有的图的位置获到,例如得到8,12,15,21,23........,354.共100个数字将这些数值保存到一个txt文件中,采用VBA读取这些数据到一个数组中,我们的图是4个一行,共25行,一共100张图,由于所有图的位置决定了得到的数字,也就是页码,例如第一张图得到8这个图号(页码),第二张得到12这个图号,以此类推.
这里我们用到了Blockreference也就是类参考,是一个非常好的东西,通过搜索Modelspace中所有的Blockreference,我们得到每个的坐标,通过坐标决定它的页码.然后修改它的Textstring,也就是它的值,得到我们要的结果.
原代码:
Sub AutoPages()
Dim tempObj As Object
Dim x As Double, y As Double
Dim numbers As Integer
Dim newvarAttributes As Variant
Dim BRobj As AcadBlockReference
Dim currInsertionPoint As Variant
Dim Pages(1 To 200) As Integer
Dim ii As Integer
ii = 1
Open "C:\1.txt" For Input As #1
While Not EOF(1)
Line Input #1, Mystring
Pages(ii) = CInt(Mystring)
ii = ii + 1
Wend
Close #1
For Each tempObj In ThisDrawing.ModelSpace
If TypeName(tempObj) = "IAcadBlockReference" Then
Set BRobj = tempObj
Set newvarAttributes = BRobj.GetAttributes(0)
currInsertionPoint = newvarAttributes.insertionPoint
x = currInsertionPoint(0)
y = currInsertionPoint(1)
numbers = (x - 8759) \ 366 + ((2329.20012341701 - y) \ 266) * 4 + 1
newvarAttributes.textString = Pages(numbers)
Debug.Print numbers
End If
Next
End Sub
谢谢楼上的办法!!!,但是用于图纸集,估计就没用了!我已经不用模型空间出图了 问题应该是这样的.....
图纸集管理
对新手来说 .这个还是一个迷.很想学这东西.
可惜到现在都不清楚如何操作. 这个问题我发到欧特克中国官方网站论坛也没有得到解决,十分郁闷啊!!!:'( :'( 难道这是一个很冷门的话题吗?