永久更改 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:对象变量或块变量未设置。
关于如何使这项工作有任何想法吗?
是的,正如您所发现的,您需要使用设计器 属性 进行永久性更改。试试下面的代码...
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
我有一个相当大的多页用户表单,我想在其中更改一些标签。我写了下面的代码,才意识到它只在 运行 时间内更改了上述属性 - 而我需要永久更改它们。
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:对象变量或块变量未设置。
关于如何使这项工作有任何想法吗?
是的,正如您所发现的,您需要使用设计器 属性 进行永久性更改。试试下面的代码...
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