iLogic. Замена компонента

Хочу показать простое, но очень полезное правило iLogic, которым пользуюсь каждый день для замены одних компонентов на другие. Данное правило позволяет легко производить замену необходимого количества компонентов в сборке. Правило работает по следующему принципу: необходимо последовательно выделить те детали или сборки, которые мы хотим заменить и последним выбрать тот компонент, на который мы хотим заменить. После чего нажать кнопку выполнения правила.

Замена компонентов в сборке

Код с комментариями для освоения.

' Получаем активный документ.
Dim asmDoc As AssemblyDocument
asmDoc = ThisApplication.ActiveDocument

' Получаем коллекцию выделенных элементов.
Dim selSet As SelectSet
selSet = asmDoc.SelectSet

' Выходим если коллекция пуста.
If selSet.Count = 0 Then
	MessageBox.Show("Должна быть выделена деталь или подсборка")
	Return
End If

' Создаем транзакцию для отмены.
Dim oTransaction As Transaction
oTransaction = ThisApplication.TransactionManager.StartTransaction(asmDoc, "Замена компонента")

Try
	' Получаем последний выбранный компонент (конкретное вхождение в сборке) в коллекции выделенных компонентов.
	' Данный компонент будет заменять предыдущие компоненты.
	Dim LastCompOcc As ComponentOccurrence
	LastCompOcc = selSet.Item(selSet.Count)

	' Перебираем по очереди все выбранные нами компоненты в коллекции.
	For Each CurrentCompOcc As ComponentOccurrence In selSet

		' Заменяем компонент на "последний выбранный".
		CurrentCompOcc.Replace(LastCompOcc.Definition.Document.fullfilename, False)

		' Если текущий компонент является последним, то покидаем перебор.
		If CurrentCompOcc Is LastCompOcc Then
			Exit For
		End If

	Next

	' Завершаем транзакцию отмены.
	oTransaction.End

Catch ex As Exception
	' В случае непредвиденной ошибки сбрасываем транзакцию отмены.
	oTransaction.Abort

	' Выводим сообщений об ошибке.
	MessageBox.Show(ex.ToString(), "Произошла ошибка!")

	Return

End Try

В коде используется менеджер транзакций. Это необходимо для того, чтобы иметь возможность за одну отмену действий (CTRL+Z) отменять все изменения, вызванные правилом.
В данном коде нет проверок на тип открытого документа и нет проверок на тип выделенных компонентов. За обработку некоторых ошибок отвечает блок Try-Catch, который прерывает транзакцию в случае неудачи и выводит сообщение с информацией об ошибке.