Hello
I've modified the drawing to add column number attributes to the Title Block.
I've attached a new file.
Thank you.
'' Autodeks 21/03/2025
Sub Referencia()
Dim Seleccion As AcadSelectionSet
Dim nombreSeleccion As String
Dim item As Object
Dim valorHoja As String
'' Atributos de bloque TABLE
Dim TagTableSheet As String
Dim TagTableColumn As String
TagTableSheet = "SHEET_"
TagTableColumn = "COLUMN_"
'' Atributos Boque Hoja
Dim TagSheet As String
TagSheet = "SHEET"
oApi.MensajeEditor (vbCrLf & vbCrLf & "Selecciona Sheet y Table")
nombreSeleccion = "Referencia"
Set Seleccion = NuevaSeleccion(nombreSeleccion)
Seleccion.SelectOnScreen
'NumeraHoja Sset, contador
For Each item In Seleccion
If item.EffectiveName = "TITLE" Then
valorHoja = AtributoObjeto(item, TagSheet)
End If
If item.EffectiveName = "TABLE" Then
valorHoja = AtributoObjeto(item, TagSheet)
ActualizarAtributoPorObjeto item, TagTableSheet, valorHoja
End If
Next
Seleccion.Delete
ThisDrawing.Utility.Prompt "Proceso Terminado"
End Sub
Function AtributoObjeto(Objeto As Object, Identificador As String) As String
Dim AttArray As Variant
Dim Atr As Variant
Dim i As Variant
If Objeto.ObjectName = "AcDbBlockReference" Then
If Objeto.HasAttributes Then
AttArray = Objeto.GetAttributes
' For Each ilista In lista
For Each i In AttArray
For Each Atr In AttArray
If Atr.TagString = Identificador Then
Dim retorno As String
retorno = Atr.TextString
End If
Next
Next
' Next
End If
End If
AtributoObjeto = retorno
End Function
Sub ActualizarAtributoPorObjeto(Objeto As Object, tag As String, valor As String)
Dim AttributeRefs As Variant
Dim item As Variant
Dim i As Variant
AttributeRefs = Objeto.GetAttributes
For i = LBound(AttributeRefs) To UBound(AttributeRefs)
For Each item In AttributeRefs
If AttributeRefs(i).TagString = tag Then
AttributeRefs(i).TextString = valor
End If
Next
Next i
End Sub
Function NuevaSeleccion(strNom As String) As AcadSelectionSet
If SelectionExiste(strNom) Then ThisDrawing.SelectionSets.item(strNom).Delete
Set NuevaSeleccion = ThisDrawing.SelectionSets.Add(strNom)
End Function
Function SelectionExiste(Nombre As String) As Boolean
Dim Sset As AcadSelectionSet
'Dim Contador As Integer
'Contador = InputBox("Rele de Caldera", "Reles Caldera")
For Each Sset In ThisDrawing.SelectionSets
If Sset.Name = Nombre Then
SelectionExiste = True
Exit Function
End If
Next Sset
End Function
Function DevolverSeleccion(cadena As String) As AcadSelectionSet
Dim Seleccion As AcadSelectionSet
LimpiarSeleccion (cadena)
Set Seleccion = ThisDrawing.SelectionSets.Add(cadena)
Seleccion.SelectOnScreen
Set DevolverSeleccion = Seleccion
End Function
Sub LimpiarSeleccion(ByVal cadena As String)
Dim SSS As AcadSelectionSets
On Error Resume Next
Set SSS = ThisDrawing.SelectionSets
If SSS.count > 0 Then
SSS.item(cadena).Delete
End If
End Sub