已知画面中已经存在排列好的矩形对象,我不想重新通过VBA创建后再手动排列。
请问,怎么在不重新创建画面矩形对象的情况下,使用VBA脚本改变画面已有矩形对象背景颜色动态对话框中连接的变量和颜色范围?(如下图所示)
问题的难点是:使用VBA改变画面中已有已有已有对象的动态属性
在WinCC的帮助文件里我已经找到类似如题的脚本如下:
Sub FindObjectsByType()
'通过遍历对象类型,来改变对象的属性
'VBA37
Dim colSearchResults As HMICollection
Dim objMember As HMIObject
Set colSearchResults = ActiveDocument.HMIObjects.Find(ObjectType:="HMIRectangle")
For Each objMember In colSearchResults
With objMember
.Properties("BorderWidth") = 1
.Properties("BackColor") = RGB(0, 255, 0)
End With
Next objMember
End Sub
但是这段脚本改变的是对象的静态属性,我无法实现下图所示动态对话框内容的改变。
诚心请教各位前辈老师提供一个解决办法。(? ω ?)
图片说明:
最佳答案
只要有对象的名字,就可以更改它的属性了。修改动态属性就是重建这个属性,没法单独修改某一项。还是引用上一次的例子吧。
Sub Modify()
Dim objA As HMIRectangle ''''定义objA为矩形对象
Dim objADynDialog As IHMIDynamicDialog ''''定义动态对话框
Dim objAVariableTrigger As HMIVariableTrigger
Dim strHMIRectangleName As String ''''每个对象名称
Dim strVariableName As String ''''每个对象要连接的变量
Dim i As Long, j As Long, k As Long
i = 0
j = 0
k = 0
For j = 0 To 3
For i = 0 To 1
strHMIRectangleName = "矩形" + Str(k + 1) ''''矩形对象的名称
Set objA = ActiveDocument.HMIObjects(strHMIRectangleName)
strVariableName = "CR@ST410103." & k + 1 ''''连接输入/输出城的输出值到变量
Set objADynDialog = objA.BackColor.CreateDynamic(hmiDynamicCreationTypeDynamicDialog, "''''CR@ST410103." & k + 1 & "''''")
With objADynDialog
.ResultType = hmiResultTypeAnalog
.Trigger.VariableTriggers.Item("CR@ST410103." & k + 1).CycleType = hmiVariableCycleType_10s
.AnalogResultInfos.Add 0, &H80000001
.AnalogResultInfos.Add 1, &H80000002
.AnalogResultInfos.Add 2, &H80000003
.AnalogResultInfos.Add 3, &H80000004
.AnalogResultInfos.Add 4, &H80000005
.AnalogResultInfos.ElseCase = &H80000006
End With
k = k + 1
Next
Next
Set objADynDialog = Nothing
Set objA = Nothing
Set objVariableTrigger = Nothing
End Sub
==================================
注意:此处颜色表示已改为中央调色板表示。上次表述有误的,言多必失,见谅。颜色是可以用16进制表示的,不过VBA中16进制是&H表示,0x是C语言表示法。不过16进制表示颜色是&HBBGGRR格式,每个颜色占连接两位,前后依次是B/G/R.
中央调色板色号就是&H80000000+序号的方法。
提问者对于答案的评价:
果然是高手!醍醐灌顶┗|`O′|┛ 嗷~~
想再问一下前辈,能不能使用For...Each来做呢?我试了几次都不行,因为For需要指定循环次数不太方便
最佳答案作者回复:
多试几次,没有问题的。用for each如果有不需要处理的矩形,要加过滤条件。
链接: https://pan.baidu.com/s/1r3l1n_Nn3KK-p316iPd1kg 提取码: m4w8
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc367045.html