我有一个用户表单,当电缆形状放到工作表上时会运行:该表单询问用户电缆分类是主要还是次要,以及托盘类型是主要还是次要。例如,如果选择了主电缆和托架,则电缆类型+托盘形状数据将更改为仅包含主电缆和托架的下拉列表。
Public shp3 As Shape
Private Sub CommandButton1_Click()
Dim CableClass As String
Dim TrayClass As String
Dim pg2 As Page
CableClass = ComboBox1.Value
TrayClass = ComboBox2.Value
Set shp3 = ActivePage.Shapes.ItemFromID(cID)
If CableClass = "Primary" Then
shp3.Cells("Prop.Row_CableClass.Value").FormulaU = """Primary"""
shp3.Cells("Prop.Row_CableType.Format").FormulaU = """Cable 1;Cable
2;Cable 3;Cable 4"""
ElseIf CableClass = "Secondary" Then
shp3.Cells("Prop.Row_CableClass.Value").FormulaU = """Secondary"""
shp3.Cells("Prop.Row_CableType.Format").FormulaU = """Cable 1;Cable
2;Cable 3;Cable 4"""
End If
If TrayClass = "Primary" Then
shp3.Cells("Prop.Row_TrayClass.Value").FormulaU = """Primary"""
shp3.Cells("Prop.Row_TrayType.Format").FormulaU = """cable tray
1;cable tray 2;cable tray 3;cable tray 4"""
ElseIf TrayClass = "Secondary" Then
shp3.Cells("Prop.Row_TrayClass.Value").FormulaU = """Secondary"""
shp3.Cells("Prop.Row_TrayType.Format").FormulaU = """cable tray
1;cable tray 2;cable tray 3;cable tray 4"""
End If
Unload Me
End Sub
一旦从形状数据中选择了特定类型的电缆或托架,我希望成本根据选择的内容自动更改。换句话说,我希望根据从下拉框中选择的电缆类型来动态更改形状数据(成本)。
答案 0 :(得分:1)
答案不是一个完整的答案,但是太长/太复杂了,无法发表评论:
在用户表单代码后面:
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
参数的任何一种访问。
如果您需要这两个信息来确定成本,那么您将拥有一个将组合框和形状作为参数的例程,请确保都选择了有效值,然后进行所有更新。
我对Visio对象模型一点都不熟悉,因此您必须弄清楚如何设置成本,但是您似乎已经足够了解如何处理该部分。
答案 1 :(得分:0)
您也可以在ShapeSheet
中做一些强大的事情,而不必诉诸VBA。您可以对形状下降强制输入问题(数据输入),然后使用属性(Prop.x
,User.x
)设置下拉列表。
看看您提供的代码,您将执行与ShapeSheet
中相同的操作,只是使用不同的语法/语言/界面。逻辑类似,您设置了一个User
属性(或两个,因为您正在查看电缆和托架),该属性根据选择的是“主要”还是“次要”而返回true或false。然后,您可以使用该Boolean
结果返回相应的选择字符串。
我没有在此计算机上使用Visio来提供具体示例-我已使用此技术来更改形状的颜色,甚至更改几何形状。