簡體   English   中英

永久更改 VBA 用戶窗體中多個控件的屬性

[英]Changing properties of multiple controls in VBA userform permanently

我有一個相當大的多頁用戶表單,我想在其中更改一些標簽。 我編寫了以下代碼,只是意識到它只在運行時更改了所述屬性 - 而我需要永久更改它們。

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: Object 變量或未設置塊變量

關於如何使這項工作的任何想法?

是的,正如您所發現的,您需要使用 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM