Подстановочные знаки и VBA на Rockwell FactoryTalk View SE



Я очень новичок в VBA (я сделал 3 недели этого в 9 классе, но это все). Я промышленный программист ПЛК по профессии, но одно из моих приложений потребовало, чтобы я раскопал болезненные воспоминания о классе 9 IT для системы Rockwell FactoryTalk View SE SCADA.



Мое приложение состоит в том, что есть сервер, который хранит графический дисплей, и несколько клиентов, которые отображают эти графические дисплеи. В зависимости от того, какой клиент используется, Я хочу сделать некоторые элементы видимыми или невидимый для пользователя. Я могу сделать это в основном, но мне интересно, есть ли более эффективный способ. Вот код в его нынешнем виде:

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.Item ("* " ) выдает ошибку 91 - переменная объекта или с переменной блока не установлена.



Может ли кто-нибудь сказать мне, близок ли я к цели? Или если это невозможно? Я даже не знаю, есть ли способ заставить его искать каждый элемент на дисплее, поскольку это не просто электронная таблица excel, где я мог бы сказать ему искать столбец.

Спасибо!

419   1  
vba

1 ответ:

Вам нужно будет перебрать все отдельные элементы. Попробуйте что-нибудь вроде этого:

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

Comments

    Ничего не найдено.