Check out using a Using statemtment to dispose of your underlying unmanaged
Objects.
Also For Each to enumerate your SymbolTable...
{code}
Public Sub Cmd1() ' This method can have any name
Dim doc As Document = _
Application.DocumentManager.MdiActiveDocument
Using tr As Transaction = _
doc.Database.TransactionManager.StartTransaction()
Dim layTable As LayerTable = _
tr.GetObject(doc.Database.LayerTableId, _
OpenMode.ForRead)
Dim id As ObjectId
For Each id In layTable
Dim rec As LayerTableRecord = _
tr.GetObject(id, OpenMode.ForRead)
If (rec.Name = "gunga") Then
rec.UpgradeOpen()
rec.Name = "lagunga"
End If
Next
tr.Commit()
End Using
'or better...
Using tr As Transaction = _
doc.TransactionManager.StartTransaction()
Dim layTable As LayerTable = _
tr.GetObject(doc.Database.LayerTableId, _
OpenMode.ForRead)
If (layTable.Has("goo")) Then
Dim r As LayerTableRecord = _
tr.GetObject(layTable("goo"), OpenMode.ForWrite)
r.Name = "bar"
tr.Commit()
End If
End Using
End Sub
{code}
wrote in message news:6211936@discussion.autodesk.com...
Hello
I tried to rename layers this way, but it seems not to work.
What is wrong with it? No errormessage, but no result too 😞
Regards,
Andreas
"
Private Sub LayerRename(ByVal OldName As String, ByVal NewName As String)
Dim myDWG As ApplicationServices.Document
Dim myTransMan As DatabaseServices.TransactionManager
Dim myTrans As DatabaseServices.Transaction
myDWG =
ApplicationServices.Application.DocumentManager.MdiActiveDocument
myTransMan = myDWG.TransactionManager
myTrans = myTransMan.StartTransaction
Dim myLT As DatabaseServices.LayerTable
Dim myLTR As DatabaseServices.LayerTableRecord
Dim mySTE As DatabaseServices.SymbolTableEnumerator
myLT =
myDWG.Database.LayerTableId.GetObject(DatabaseServices.OpenMode.ForRead)
mySTE = myLT.GetEnumerator
While mySTE.MoveNext
myLTR =
mySTE.Current.GetObject(DatabaseServices.OpenMode.ForRead)
If myLTR.Name = OldName Then
myLTR.UpgradeOpen()
myLTR.Name = NewName
End If
End While
myTrans.Dispose()
myTransMan.Dispose()
End Sub
"