如何永久添加新的多页选项卡并为其命名?
How do I permanently add a new multipage tab and name it?
我正在尝试向多页用户窗体添加一个新选项卡,但我希望更改是永久性的,并且在下次我 运行 程序时仍然存在。
我找到了一种在选项卡中添加的方法,但它只适用于那个 运行 时间。然后我找到了后面的代码并将我的信任设置更改为信任对 VBA 项目模型的访问,但是我一直遇到对象不支持此 属性?
Sub Test()
Dim vbComp As Object
Dim objCntrl As Control
Set vbComp = ThisWorkbook.VBProject.VBComponents("TabStripUserForm")
Set objCntrl = vbComp.Designer.Controls("ProductListTabStrip")
'add page
objCntrl.Pages.Add
'remove page
objCntrl.Pages.Remove (1)
End Sub
我希望它向用户表单多页添加另一个选项卡,但是它说该对象不支持此 属性 或方法。我已经三重检查了用户表单和多页的名称是否正确。
如果您要求,请在此处永久添加内容:
然后,幸运的是它不容易完成(可能有一些模糊的方式和某种反射,但我不确定这是一个好主意)。可能已经注意到,如果下面的代码是 运行,那么它应该只显示一次:
Sub TestMe()
Dim tabObj As Control
Set tabObj = Form.Controls("Tabs")
With tabObj
.Tabs.Add "Gosho"
.Tabs.Add "Pesho"
.Tabs.Add "Atanas"
Debug.Print .Object.Count
End With
Form.Show
End Sub
为什么?
原因是表单是一个蓝图,它就像一个class。从代码中将 属性 添加到 class 并不是一个好习惯。
解决方法?
最好的解决方法是使用具有 OOP 和关注点分离的表单。然后,在应用程序中,每当调用它时,就会出现在蓝图之后创建的对象。而不是 "breaking" 对象,表单将被隐藏。然后,通过应用程序,如果再次调用它,它将通过 Hide
选项显示。示例:
- My implementation of the idea
- The original idea
- https://codereview.stackexchange.com/questions/154401/handling-dialog-closure-in-a-vba-user-form)
如果Excel文件完全关闭了怎么办?用新标签页打开它还能用吗?
没有。但对于这种情况,应该有另一种解决方法,将选项卡写入设置工作表中的某处并调用表单,同时考虑设置工作表的值。
我正在尝试向多页用户窗体添加一个新选项卡,但我希望更改是永久性的,并且在下次我 运行 程序时仍然存在。
我找到了一种在选项卡中添加的方法,但它只适用于那个 运行 时间。然后我找到了后面的代码并将我的信任设置更改为信任对 VBA 项目模型的访问,但是我一直遇到对象不支持此 属性?
Sub Test()
Dim vbComp As Object
Dim objCntrl As Control
Set vbComp = ThisWorkbook.VBProject.VBComponents("TabStripUserForm")
Set objCntrl = vbComp.Designer.Controls("ProductListTabStrip")
'add page
objCntrl.Pages.Add
'remove page
objCntrl.Pages.Remove (1)
End Sub
我希望它向用户表单多页添加另一个选项卡,但是它说该对象不支持此 属性 或方法。我已经三重检查了用户表单和多页的名称是否正确。
如果您要求,请在此处永久添加内容:
然后,幸运的是它不容易完成(可能有一些模糊的方式和某种反射,但我不确定这是一个好主意)。可能已经注意到,如果下面的代码是 运行,那么它应该只显示一次:
Sub TestMe()
Dim tabObj As Control
Set tabObj = Form.Controls("Tabs")
With tabObj
.Tabs.Add "Gosho"
.Tabs.Add "Pesho"
.Tabs.Add "Atanas"
Debug.Print .Object.Count
End With
Form.Show
End Sub
为什么?
原因是表单是一个蓝图,它就像一个class。从代码中将 属性 添加到 class 并不是一个好习惯。
解决方法?
最好的解决方法是使用具有 OOP 和关注点分离的表单。然后,在应用程序中,每当调用它时,就会出现在蓝图之后创建的对象。而不是 "breaking" 对象,表单将被隐藏。然后,通过应用程序,如果再次调用它,它将通过 Hide
选项显示。示例:
- My implementation of the idea
- The original idea
- https://codereview.stackexchange.com/questions/154401/handling-dialog-closure-in-a-vba-user-form)
如果Excel文件完全关闭了怎么办?用新标签页打开它还能用吗?
没有。但对于这种情况,应该有另一种解决方法,将选项卡写入设置工作表中的某处并调用表单,同时考虑设置工作表的值。