Не полный ответ, но слишком длинный / сложный для простого комментария:
В вашей форме пользователя код позади:
Private Sub CableClass_Change()
SetCableClassValues CableClass, shape
End Sub
Private Sub TrayClass_Change()
SetTrayClassValues TrayClass, shape
End Sub
В отдельном стандартном модуле:
Public Sub SetCableClassValues (ByVal cableClass as ComboBox, ByVal theShape as Visio.Shape)
theShape.Cells("Prop.Row_CableClass.Value").FormulaU = """Primary"""
theShape.... 'set the appropriate cost value here
End Sub
Public Sub SetTrayClassValues (ByVal trayClass as ComboBox, ByVal theShape as Visio.Shape)
theShape.Cells("Prop.Row_CableClass.Value").FormulaU = """Primary"""
theShape.... 'set the appropriate cost value here
End Sub
Обратите внимание, что все это "воздушное кодирование", поэтому оно не будет работать точно так, как написано. Однако, как только вы выполните процедуру SetCableClassValues
, вы получите доступ ко всему в поле со списком cableClass
, как если бы вы были непосредственно в коде. У вас также будет доступ к theShape
- какой бы он ни был в вашем существующем коде как shp3
, который вы передадите как параметр shape
.
Если вам нужны оба бита информации для определения стоимости, тогда у вас будет 1 подпрограмма, которая будет принимать и комбобоксен, и фигуру в качестве параметров, убедитесь, что для обоих выбраны действительные значения, затем выполните все обновления.
Я совсем не знаком с объектной моделью Visio, поэтому вам придется выяснить, как установить стоимость, но, похоже, у вас достаточно понимания, чтобы справиться с этой частью.