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
为什么?
原因是表单是一个蓝图,它就像一个类。从代码中向类添加属性在某种程度上不是一个好习惯。
解决方法?
最好的解决方法是使用带有 OOP 和关注点分离的表单。然后,在应用程序中,无论何时调用它,都会出现在蓝图之后创建的对象。不是“破坏”对象,而是隐藏表单。然后,通过应用程序,如果再次调用它,它将通过Hide
选项显示。例子:
- 我的想法的实现
- 最初的想法
- https://codereview.stackexchange.com/questions/154401/handling-dialog-closure-in-a-vba-user-form)
如果 Excel 文件完全关闭怎么办?用新标签打开它会起作用吗?
不,但是对于这种情况,应该有另一种解决方法,将选项卡写入设置工作表中的某处并调用表单,同时考虑到设置工作表的值。
推荐阅读
- android-studio - Android Studio 显示 SDK 已安装但未安装
- python - 为什么 itertools.zip_longest(*indexes_batch) 返回针对 itertools.zip_longest(indexes_batch) 的转置结果
- hybris - Hybris (1808) 如何通过克隆自定义插件
- nginx - 如果 URL 中不存在 Nginx 添加特定前缀
- mysql - SQL - 如何使用 WHERE 条件包含零结果的行
- java - 从 DTO 映射到实体时如何对密码进行编码?
- java - 将异常捕获到 Spring Job
- c - 为什么指向相同内容的不同字符串指针在c中具有相同的加法器?
- c# - 如何通过登录用户添加自定义 http 标头属性和值?
- filtering - DAX:将部分上下文提取到外部变量