You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:04:58