Постоянное изменение свойств нескольких элементов управления в пользовательской форме VBA - PullRequest
0 голосов
/ 22 апреля 2020

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

Sub ephemeralNameCh()
   Dim p As Integer, lenTag As Integer, lastShMulti As Integer
   Dim Ctrl As Control

   lastShMulti = uf_Screening.MultiPage1.Count - 1              'Last pg in multipage uf

   For p = 0 To lastShMulti
      For Each Ctrl In uf_Screening.MultiPage1.Pages(p).Controls
         'If tags needs to be change, do so
         If Ctrl.Tag <> "" And Left(Ctrl.Tag, 3) <> "P10" And Left(Ctrl.Tag, 3) <> "P11" Then
            If Left(Ctrl.Tag, 2) <> "P0" Then
               lenTag = Len(Ctrl.Tag)
               'New tag
               Ctrl.Tag = "P0" & Right(Ctrl.Tag, lenTag - 1)
            End If
         End If
      Next Ctrl
   Next p
End Sub

Из-за множества похожих вопросов я Я, наверное, должен использовать

With ThisWorkbook.VBProject.VBComponents("uf_Screening").Designer

Но я не смог реализовать его, несмотря на несколько вариантов. Это

Sub permanentNameCh()
   Dim p As Integer, lenTag As Integer, lastShMulti As Integer
   Dim Ctrl As Control

   lastShMulti = uf_Screening.MultiPage1.Count - 1              'Last pg in multipage uf

   With ThisWorkbook.VBProject.VBComponents("uf_Screening").Designer
      For p = 0 To lastShMulti
         For Each Ctrl In uf_Screening.MultiPage1.Pages(p).Controls
            'If tags needs to be change, do so
            If Ctrl.Tag <> "" And Left(Ctrl.Tag, 3) <> "P10" And Left(Ctrl.Tag, 3) <> "P11" Then
               If Left(Ctrl.Tag, 2) <> "P0" Then
                  lenTag = Len(Ctrl.Tag)
                  'New tag
                  .MultiPage1.Pages(p).Controls(Ctrl.Name).Tag = "P0" & Right(Ctrl.Tag, lenTag - 1)
               End If
            End If
         Next Ctrl
      Next p
   End With
End Sub

приводит к Ошибка выполнения 91: переменная объекта или переменная блока не установлена ​​.

Есть идеи, как заставить эту работу работать?

1 Ответ

0 голосов
/ 22 апреля 2020

Да, как вы обнаружили, вам нужно использовать свойство Designer для внесения постоянных изменений. Попробуйте следующий код ...

Option Explicit

Sub permanentNameCh()
   Dim p As Integer, lenTag As Integer
   Dim Ctrl As Control

   With ThisWorkbook.VBProject.VBComponents("uf_Screening").Designer.MultiPage1
        For p = 0 To .Pages.Count - 1
            For Each Ctrl In .Pages(p).Controls
                'If tags needs to be change, do so
                If Ctrl.Tag <> "" And Left(Ctrl.Tag, 3) <> "P10" And Left(Ctrl.Tag, 3) <> "P11" Then
                   If Left(Ctrl.Tag, 2) <> "P0" Then
                      lenTag = Len(Ctrl.Tag)
                      'New tag
                      Ctrl.Tag = "P0" & Right(Ctrl.Tag, lenTag - 1)
                   End If
                End If
            Next Ctrl
        Next p
   End With
End Sub
...