我正在尝试向多页用户表单添加新标签,但是我希望更改是永久的,并且在下次运行程序时仍然存在。
我找到了一种添加选项卡的方法,但仅适用于该运行时。然后,我找到了下面的代码,并更改了我的信任设置以信任对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
我希望它向用户表单多页添加另一个选项卡,但是它说对象不支持此属性或方法。我已经三重检查了用户表单和多页页面的名称是否正确。
答案 0 :(得分:2)
如果您要在此处永久添加一些内容:
然后,幸运的是,这并不容易做到(可能存在一些模糊的方法,需要进行某种反射,但是我不确定这是一个好主意)。可能已经注意到,如果运行了下面的代码,则应该只显示一次:
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
为什么?
原因是表格是一个蓝图,就像一个类。从代码中向类添加属性在某种程度上不是一个好习惯。
解决方法?
最好的解决方法是将表单与OOP和关注点分离一起使用。然后,在应用程序中,无论何时调用它,都会显示在蓝图之后创建的对象。而不是“破坏”对象,而是隐藏表单。然后,通过应用程序,如果再次调用它,它将通过Hide
选项显示。例子:
Excel文件是否完全关闭了?使用新标签页打开该文件是否可以正常工作?
不。但是对于这种情况,应该有另一种解决方法,将选项卡写到设置工作表中的某个位置,然后考虑设置工作表的值来调用表单。