我已经参与了几个项目,现在我被MS Excel和MS Access难倒,在设计视图中我无法使用VBA来操作对象。它们是非常简单的任务,例如在MS Excel中更改用户窗体上的标签名称或在MS Access中向报表添加新文本框,但它们似乎是不可能的,因为任何宏只会在激活所述用户窗体或报告时使用。所以一切都在运行时完成。
要专注于一个,在MS Excel中,我希望能够运行一个代码,该代码将遍历我的用户窗体上的所有标签,并从" Label1"," Label2&#34重命名它们;等等...到" Lbl1"," Lbl2"等...但是我不能只是单击一个按钮来运行用户形态设计的宏浏览所有标签并更改其名称。如果我能够做到这一点,那么我可以更好地使用其余的运行时代码。没有它,我可以选择重命名我拥有的每个标签,但是有近100个标签,我想通过VBA执行此操作,因为我已经可以看到知道如何在这些设计视图中运行代码非常有用Visual Basic元素。
请问您是否可以在设计视图中操作这些VB对象?
答案 0 :(得分:1)
如果您设置了特殊的宏权限,则可以从代码对项目进行编程。
详细信息在Chip的网站上:http://www.cpearson.com/excel/vbe.aspx
答案 1 :(得分:1)
不,这是不可能的。如果您有一个名为Form1
的设计器并在即时窗格中键入Form1.Show
,VBE将在它显示表单之前关闭设计器。这就是它的方式。
现在,如果您有标签Label1
,Label2
和Label3
,那么您就可以使用我称之为无意义的标识符。将它们重命名为Lbl1
,Lbl2
和Lbl3
会让事情变得更糟。
如果您在代码中的任何位置引用它们,重命名它们将会破坏您的代码。按钮或其他任何与您正在处理的事件有关的情况更糟糕:将Button1
重命名为Btn1
不会将Button1_Click()
程序重命名为Btn1_Click()
。
使用有意义的名称。如果Label1
位于文本框的顶部,我不知道,某些用户名,则将其命名为lblUserName
或UserNameLabel
。用有意义的名字。总是
我写过一个重构工具,用于重命名事物,处理事件处理程序和许多其他事情;您可以右键单击代码中对Label1
的引用,从上下文菜单中选择Refactor > Rename
,输入新名称,该工具将重命名所有引用,以及控件本身。有问题的工具称为Rubberduck,并且除了让您重命名之外,它还做得更多。
如果标签未在代码中的任何位置引用,则它们不需要名称。为什么要这么麻烦?
答案 2 :(得分:0)
您可以从普通模块运行代码以更改用户表单的设计。您必须在信任中心设置中拥有对VBA项目的可信访问权限。然后,它只是使用相关Designer
的{{1}}属性的问题:
VBComponent
运行此表单时不得加载表单。