Rockwell FactoryTalk View SE上的通配符和VBA

Rockwell FactoryTalk View SE上的通配符和VBA,vba,Vba,我对VBA非常陌生(我在九年级学了三周,但仅此而已)。我是一名工业PLC程序员,但我的一个应用程序要求我为Rockwell FactoryTalk View SE SCADA系统挖掘9级IT的痛苦记忆 我的应用程序是有一个服务器,存储图形显示,和多个客户端,显示这些图形显示。根据正在使用的客户端,我希望使某些项目对用户可见或不可见。基本上我可以做到,但我想知道是否有更有效的方法。以下是目前的代码: Private Sub Display_AnimationStart() Dim HostName

我对VBA非常陌生(我在九年级学了三周,但仅此而已)。我是一名工业PLC程序员,但我的一个应用程序要求我为Rockwell FactoryTalk View SE SCADA系统挖掘9级IT的痛苦记忆

我的应用程序是有一个服务器,存储图形显示,和多个客户端,显示这些图形显示。根据正在使用的客户端,我希望使某些项目对用户可见或不可见。基本上我可以做到,但我想知道是否有更有效的方法。以下是目前的代码:

Private Sub Display_AnimationStart()
Dim HostName As String
HostName = Environ$("computername")
Select Case HostName
    Case "CCSPE1X2"
        Elements.Item("VBAControl_X2Only").Visible = True
    Case "CCSPE1X3"
        Elements.Item("VBAControl_X3Only").Visible = True
    End Select
End Sub
这一切都有效;我只是将所有本应仅对X2客户机可见的内容分组到一个名为“VBA控制”X2Only”的组中,等等。但这样做会让图形编辑器很难处理,因为来自整个显示器的碎片堆积在一个组中,与它们真正属于的其他组分开。我决定最好将它们从一个大组中取出,然后将每个项单独添加到VBA代码中

然后我想,如果有一种方法可以使用通配符呢?因此,任何应该只在CCSPE1X2上可见的项目,我将其命名为“StartButtonx2only”或“StopButtonx2only”,等等。然后我搜索名称以“X2Only”结尾的任何项目,并使其不可见

我的设想是:

Dim ElementName As String
        If Elements.Item("*").Name Like "*X2Only" Then
            ElementName = Elements.Item("*").Name
            Elements.Item(ElementName).Visible = True
        End If
这不起作用(我真的没想到它会真的起作用);当它到达If Elements.Item(“*”)时,它给出错误91-对象变量或未设置块变量

有人能告诉我我是否接近目标吗?或者如果这是不可能的?我甚至不知道是否有办法让它搜索显示器上的每一项,因为它不仅仅是一个excel电子表格,我可以告诉它搜索一列


谢谢

您需要遍历所有单个项目。试着这样做:

    For Each Item In Elements
        If Item.Name Like "*X2Only" Then
            Item.Visible = True
        End If
    Next Item