我对 VBA 非常陌生(我在 9 年级做了 3 周,但仅此而已)。我是一名工业 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 客户端可见的内容分组到一个名为“VBAControl_X2Only”的组中,等等。但这会使图形编辑器使用起来很痛苦,因为显示器上的点点滴滴都堆积成一个组,与他们真正属于的其他组分开。我决定最好将它们从一个大组中取出,然后将每个项目单独添加到 VBA 代码中。

然后我想,如果有办法在这里使用通配符呢?因此,任何只应在 CCSPE1X2 上可见的项目,我将其命名为“StartButton_X2Only”或“StopButton_X2Only”等。然后我搜索名称以“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

关于vba - Rockwell FactoryTalk View SE 上的通配符和 VBA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25175194/

10-14 12:11