Visio VBA如何读取和设置连接线粗细?报错问题求助
Visio VBA 读取/设置连接线粗细的正确方法
核心问题分析
你遇到的几个错误根源:
- Connect对象≠连接线形状:
Page.Connects集合存储的是连接关系对象,不是可视化的连接线形状,直接调用CellsSRC会触发438错误。 - 形状类型判断错误:
visObjTypeConnect(值8)指代的是连接点形状,而非你要找的连接线形状,连接线对应的类型常量是visConnector(值为3)。 - 对象赋值遗漏关键字:VBA中给对象变量赋值必须使用
Set,你之前的shp = connnn.FromSheet缺少Set,导致触发"对象必需"错误。
正确实现代码
方法1:通过形状类型筛选连接线
遍历页面所有形状,判断是否为连接线类型后设置线宽:
Dim shp As Shape Set allShapes = Application.ActiveWindow.Page.Shapes For Each shp In allShapes ' 判断是否为连接线(visConnector对应值3) If shp.Type = visConnector Then ' 设置线宽为10pt;读取线宽可改为:Debug.Print shp.CellsSRC(...).Result("pt") shp.CellsSRC(visSectionObject, visRowLine, visLineWeight).FormulaU = "10 pt" End If Next shp
方法2:通过模板名称精准匹配(适配自定义连接线)
如果你的连接线基于特定模板创建(比如默认的"动态连接线"),可通过模板名称判断:
Dim shp As Shape Set allShapes = Application.ActiveWindow.Page.Shapes For Each shp In allShapes ' 避免未绑定模板的形状报错 If Not shp.Master Is Nothing Then ' 模板名称根据Visio语言版本调整(英文为"Dynamic Connector") If shp.Master.Name = "动态连接线" Then shp.Cells("LineWeight").FormulaU = "10 pt" End If End If Next shp
方法3:从连接关系中定位连接线(修正你的原有代码)
若需从连接关系中获取对应连接线,可使用Connect.Shape属性(仅Visio 2013及以上版本支持):
Dim conn As Connect Set allConnects = Application.ActiveWindow.Page.Connects For Each conn In allConnects ' 获取连接关系对应的连接线形状 If Not conn.Shape Is Nothing Then conn.Shape.CellsSRC(visSectionObject, visRowLine, visLineWeight).FormulaU = "10 pt" End If Next conn
读取连接线粗细的方法
要读取当前线宽,只需获取Result属性并指定单位:
' 读取指定连接线的线宽(单位为pt) Dim lineWeight As Double lineWeight = shp.CellsSRC(visSectionObject, visRowLine, visLineWeight).Result("pt") Debug.Print "当前线宽:" & lineWeight & " pt"
内容的提问来源于stack exchange,提问作者Francis
相关产品推荐
相关产品推荐

