我对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
这不行(我真的没想到它);当它到达如果Elements.Item(“*”)它给出错误91 - 对象变量或没有设置块变量。
有人能告诉我,我是否接近标记?或者如果不可能的话?我甚至不知道是否有办法让它搜索显示器上的每个项目,因为它不仅仅是一个excel电子表格,我可以告诉它搜索一列。
谢谢!
答案 0 :(得分:3)
您需要遍历所有单个项目。尝试这样的事情:
For Each Item In Elements
If Item.Name Like "*X2Only" Then
Item.Visible = True
End If
Next Item