I send you whole class
Maybe it is helpful for you. object id is block object.objectid in short property of object
Take a look at the code; the main sub create a selection set on screen and filter all the blocks
in selection set then changed desired blocks att with SetAttribute Sub.
Let me know if it is helpful...
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Public Class Class1
<CommandMethod("SBEA")> _
Public Sub SBlocksEditAtts()
Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
Dim acTypValAr(0) As TypedValue
acTypValAr.SetValue(New TypedValue(DxfCode.Start, "INSERT"), 0)
Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
Dim prselres As PromptSelectionResult = acDocEd.GetSelection(acSelFtr)
If prselres.Status = PromptStatus.OK Then
Dim acSSet As SelectionSet = prselres.Value
Dim nn As Integer = 0
For Each acSSObj As SelectedObject In acSSet
SetAttribute(acSSObj.ObjectId, "BLOCKNAME", "ATTNAME", nn.ToString)
nn = nn + 1
Next
acDocEd.WriteMessage("Number of objects selected: " & acSSet.Count.ToString())
End If
End If
acTrans.Commit()
End Using
End Sub
Public Sub SetAttribute(ByVal BlockID As Autodesk.AutoCAD.DatabaseServices.ObjectId, ByVal blckname As String, ByVal AttTag As String, ByVal AttVal As String)
Dim MyDb As Database = Application.DocumentManager.MdiActiveDocument.Database
If BlockID.IsNull Then Exit Sub
Try
Using myTrans As Transaction = MyDb.TransactionManager.StartTransaction
Dim myBlckRef As BlockReference
Dim myAttColl As AttributeCollection
Dim myBlckTable As BlockTableRecord
myBlckRef = BlockID.GetObject(OpenMode.ForWrite)
If myBlckRef.IsDynamicBlock Then
myBlckTable = myTrans.GetObject(myBlckRef.DynamicBlockTableRecord, OpenMode.ForRead)
Else
myBlckTable = myTrans.GetObject(myBlckRef.BlockTableRecord, OpenMode.ForRead)
End If
If String.Compare(myBlckTable.Name, blckname, True) = 0 Then
myAttColl = myBlckRef.AttributeCollection
Dim myEnt As Autodesk.AutoCAD.DatabaseServices.ObjectId
Dim myAttRef As Autodesk.AutoCAD.DatabaseServices.AttributeReference
For Each myEnt In myAttColl
myAttRef = myEnt.GetObject(OpenMode.ForWrite)
If String.Compare(myAttRef.Tag, AttTag, True) = 0 Then
myAttRef.TextString = AttVal.ToString
End If
Next
End If
myTrans.Commit()
End Using
Catch ex As Exception
End Try
End Sub
End Class