Sub join()
Dim ss As AcadSelectionSet<BR> Dim po(0 To 2) As Double<BR> <BR> On Error Resume Next<BR> <BR> po(0) = 0<BR> po(1) = 0<BR> po(2) = 0<BR> <BR> 'ThisDrawing.Blocks.Item("ok").Delete<BR> Dim bk As AcadBlock<BR> <BR> Set bk = ThisDrawing.Blocks.Add(po, "tempb")<BR> <BR> Set ss = ThisDrawing.SelectionSets.item("ssss")<BR> '------------------------------------------------<BR> If Err Then<BR> Err.Clear<BR> Set ss = ThisDrawing.SelectionSets.Add("ssss")<BR> End If<BR> '------------------------------------------------<BR> <BR> Dim ftype(0) As Integer<BR> Dim fdata(0) As Variant<BR> Dim i As Long<BR> <BR> ftype(0) = 8<BR> fdata(0) = "layer"<BR> ss.Select acSelectionSetAll, , , ftype, fdata '过滤<BR> ReDim retVal(0 To ss.count - 1) As AcadEntity<BR> For i = 0 To ss.count - 1<BR> Set retVal(i) = ss.item(i)<BR> Next<BR> <BR> ''------------------------------------------------过滤对象<BR> 'Dim retVal(), Ent As AcadEntity<BR> '<BR> '<BR> 'Dim i As Integer<BR> 'i = 0<BR> '<BR> ' ReDim retVal(0 To ss.count - 1)<BR> '<BR> ' For Each Ent In ss<BR> '<BR> ' If (Ent.layer = "layer") Then<BR> ' Set retVal(i) = Ent<BR> ' i = i + 1<BR> ' End If<BR> '<BR> ' Next<BR> ' ReDim Preserve retVal(0 To i - 1)<BR> <BR> '------------------------------------------------<BR> <BR> ThisDrawing.CopyObjects retVal, bk ' 在这里出问题了<BR> Erase retVal<BR>End Sub 关键是在定义数组上,这样写就没有问题:<BR>Dim retVal() As AcadEntity, Ent As AcadEntity<BR>注意:一般不要这样写:<BR>Dim retVal() , Ent As AcadEntity<BR>这样写的话,第一个变量会被定义成Variant,所以会造成CopyObjects时传递的不是图元数组。
页:
[1]
2