使用VBA改变画面已有对象的动态属性

已知画面中已经存在排列好的矩形对象,我不想重新通过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
但是这段脚本改变的是对象的静态属性,我无法实现下图所示动态对话框内容的改变。


诚心请教各位前辈老师提供一个解决办法。(? ω ?)

图片说明:

使用VBA改变画面已有对象的动态属性   

最佳答案

只要有对象的名字,就可以更改它的属性了。修改动态属性就是重建这个属性,没法单独修改某一项。还是引用上一次的例子吧。
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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 下午2:31
下一篇 2021年7月5日

相关推荐

  • 设置Set PG/PC Interface 的问题?

    安装Wincc的PC机上已经安装了CP1613的网卡,打开Windows控制面板下的Set PG/PC Interface,单击“选择”按钮,在“安装/删除接口…

    SIMATIC WinCC 2019年6月11日
  • sql数据库

    wincc的sql数据库里的数据可以是未压缩数据吗,如何可以,怎样实现。 最佳答案 你自己新建立一个表,然后通过脚本写入的数据就是没有压缩的。wincc的归档数据都是压缩的。 提问…

    SIMATIC WinCC 2017年11月25日
  • wincc打印报表,第一页为什么是空的

    我用,用户归档记录数据并打印出报表,但是数据打印出来为什么第一页是空的,数据在第二页上 图片说明:    最佳答案 因为报表编辑器布局的属性——封皮,默认是!关…

    2021年7月5日
  • WINCC读不出模拟量

    我的WINCC做的模拟量监控读不上来,开关量都能读上来  模拟量在S7在线监控是都能读出来,变量设置是32位浮点,双字DB,DDXX,跟S7 DB数据…

    SIMATIC WinCC 2019年6月11日
  • wincc flexible 计时计费

    立体车库人机界面设计时 ,在wincc flexible中如何用脚本编译来得到一个变量地址从一个变到另一个中间所用的时间,该时间再乘上单价就会得到费用。 最佳答…

    SIMATIC WinCC 2017年8月18日
  • WINCC V7.3如何画变送器

    大家好,请问WINCC 7.3温度变送器和压力变送器怎么画。 最佳答案 自己画一个吧!图库里面貌似没有。 提问者对于答案的评价:多谢大家!!

    SIMATIC WinCC 2017年6月8日
  • 谁有可用的Wincc

    奇怪,之前提问过,又被删了。请问哪可以下载Wincc,知道的前辈给个链接?学习用的,但是找了好久都没找到,是不是只能购买啊?我在网上看到wincc有4.3G,这个软件有这么大吗? …

    SIMATIC WinCC 2019年6月11日
  • 现在有simatic wincc 7.0 sp1 asia中文版么?

    现在有simatic wincc 7.0 sp1 asia中文版么? 最佳答案 出来有一段时间了,比较大有5.6G,包含了SQL2005SP…

    SIMATIC WinCC 2019年6月11日
  • wincc系统时间提取

    提取时间写入s7 200SMART 最佳答案 参考:WINCC使用vbs脚本now就能获取当前时间,然后使用函数year month,day,hour、minu…

    SIMATIC WinCC 2021年7月5日
  • wincc rt professional 授权问题

    1.wincc rt professional服务器使用一个RT2048点的授权,客户端也用一个2048点的授权可以么2.一台服务器能带多少客户端3.一台win…

    SIMATIC WinCC 2021年7月5日

发表回复

登录后才能评论