动态向UserForm添加控件时出现Runtime Error(错误91)
解决VBA错误91:Object variable or with block variable not set
执行以下代码时触发错误91(对象变量或With块变量未设置):
Set cmd = ActiveWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls.Add("Forms.CommandButton.1", "cmdTst")
变量定义为:
Dim cmd As MSForms.CommandButton
错误原因及解决方法
宏安全限制访问VBProject
默认Excel宏安全设置会禁止访问VBA项目对象模型,导致ActiveWorkbook.VBProject引用失败。
解决:打开Excel选项→信任中心→信任中心设置→宏设置,勾选「信任对VBA项目对象模型的访问」,重启Excel后重试。UserForm1不存在或名称错误
若VBComponents("UserForm1")找不到对应窗体,会返回Nothing,后续调用Designer直接报错。
解决:打开VBA编辑器(Alt+F11),确认当前工作簿工程中存在名为UserForm1的窗体,且名称拼写完全一致(区分大小写)。分步赋值定位问题
链式调用难以定位哪个对象为空,可拆分代码分步赋值,便于调试:Dim uf As VBComponent Dim cmd As MSForms.CommandButton Set uf = ActiveWorkbook.VBProject.VBComponents("UserForm1") If Not uf Is Nothing Then Set cmd = uf.Designer.Controls.Add("Forms.CommandButton.1", "cmdTst") End If确保窗体处于设计模式
若UserForm1处于运行状态,Designer属性无法正常访问。
解决:在VBA编辑器中打开UserForm1的设计视图后,再运行代码。
内容的提问来源于stack exchange,提问作者KoolGuy90
相关产品推荐
相关产品推荐

