Jump to content

Editing Attribute Width Factor using VBA


hendersondayton

Recommended Posts

I have been succesful in editing the VALUE of an attribute using VBA using the following Code:

 

On Error Resume Next

With ThisDrawing

For Each oLayout In .Layouts

For k = 0 To oLayout.Block.Count - 1

Set entry = oLayout.Block.item(k)

Objname = entry.ObjectName

If Objname = "AcDbBlockReference" Then

If entry.Name Like "Title Info*" Then

atts = entry.GetAttributes

For I = LBound(atts) To UBound(atts)

If atts(I).TagString = "PG" Then

atts(I).TextString = oLayout.Name

End If

 

 

I am now trying to edit this specific attributes WIDTH FACTOR and I am having a hard time doing so.

Any suggestions would be great

Link to comment
Share on other sites

Welcome on board!

Give that a try

 

Private Sub Ch_Att_Width(bName As String, atag As String, dblWid As Double)

    Dim oSset As AcadSelectionSet, _
        blkRef As AcadBlockReference, _
        attObj As AcadAttributeReference, _
        attData() As AcadObject, _
        fType(2) As Integer, _
        fData(2) As Variant, _
        dxfType, _
        dxfData, _
        k As Integer


    fType(0) = 0: fType(1) = 2: fType(2) = 66
    fData(0) = "INSERT": fData(1) = bName: fData(2) = 1
    dxfType = fType: dxfData = fData
    
    For Each oSset In ThisDrawing.SelectionSets
         If oSset.Name = "$Blocks$" Then
              oSset.Delete
              Exit For
         End If
    Next oSset

    Set oSset = ThisDrawing.SelectionSets.Add("$Blocks$")
    
    MsgBox "Select blocks on screen"

    oSset.SelectOnScreen dxfType, dxfData

    For Each blkRef In oSset
         attData = blkRef.GetAttributes

         For k = 0 To UBound(attData)
              Set attObj = attData(k)

              If StrComp(attObj.TagString, atag) = 0 Then
                   attObj.ScaleFactor = dblWid
                   attObj.Update
                   blkRef.Update
                   Exit For
              End If

         Next k

    Next blkRef

    oSset.Delete

    Set oSset = Nothing
    
    MsgBox "Done"

End Sub


Sub demo()
Ch_Block_Att_Width "MLR", "PRESET", 0.45
' where: "MLR" is block name,
' "PRESET" is desired tag,
' 0.45 is width factor
End Sub

 

~'J'~

Link to comment
Share on other sites

Anotherway

 

SUB rename&changewidth()
Dim  j, k As Integer
Dim ELEMENT, ArrayAttributes


On Error Resume Next
For j = 0 To ThisDrawing.Layouts.Count - 1                 
If ThisDrawing.Layouts(j).Name = "Model" Then GoTo 10  ThisDrawing.SendCommand "layout s " & ThisDrawing.Layouts(j).Name & vbCr
               For Each ELEMENT In ThisDrawing.PaperSpace
                   If ELEMENT.EntityType = 7 Then
                       If Err Then GoTo 5
                       If ELEMENT.HasAttributes = True Then
                           ArrayAttributes = ELEMENT.GetAttributes
                           For k = LBound(ArrayAttributes) To UBound(ArrayAttributes)
                               If ArrayAttributes(k).TagString = "[color=red]TYPEATTRIBUTETAGLABELHERE[/color]" Then ArrayAttributes(k).TextString = "[color=red]TYPE TEXT TO CHANGE ATTRIBUTE TO HERE[/color]"
                               If ArrayAttributes(k).TagString = "[color=red]TYPEATTRIBUTETAGLABELHERE[/color]" Then ArrayAttributes(k).ScaleFactor = [color=red]12[/color] ' this is the width of your attribute

                           Next k
                       End If
5
                   End If
               Next
10
           Next j

End SUB

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...