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

Excel宏录制代码执行触发Error 91错误的原因及解决方法

解决VBA宏Error 91(对象变量未设置)问题

错误原因分析

出现Error 91通常是以下几种情况:

  • 目标图表未启用标题,导致ChartTitle对象不存在
  • 录制的宏过度依赖Select/Selection和ActiveChart,操作上下文变化(比如未选中图表、工作表切换)就会触发错误
  • 工作表名称拼写错误或不存在

修复后的宏代码

直接引用对象,避免不稳定的选择操作,同时自动处理标题不存在的情况:

Sub UpdateChartTitle()
    ' 定义工作表和图表对象
    Dim targetSheet As Worksheet
    Dim targetChart As ChartObject
    Dim chartTitleText As String
    
    ' 替换成你需要的标题,也可以从单元格读取或用InputBox获取客户选择
    ' 示例:从InputBox获取标题
    chartTitleText = InputBox("请输入图表标题:", "设置图表标题", "Projecten TFT afgewerkt tussen 0 en 100%!")
    If chartTitleText = "" Then Exit Sub ' 用户取消则退出
    
    ' 引用目标工作表(确保名称正确)
    Set targetSheet = ThisWorkbook.Sheets("Grafiek Realisatie TFT")
    
    ' 引用目标图表(假设工作表中只有一个图表,若有多个需指定Name)
    Set targetChart = targetSheet.ChartObjects(1) ' 或者用图表名称:targetSheet.ChartObjects("图表1")
    
    With targetChart.Chart
        ' 检查是否有标题,没有则添加
        If .HasTitle = False Then
            .HasTitle = True
        End If
        
        ' 设置标题文本
        .ChartTitle.Text = chartTitleText
        
        ' 设置标题格式(复用你原有的格式设置)
        With .ChartTitle.Format.TextFrame2.TextRange
            .Characters.Text = chartTitleText
            With .Characters.ParagraphFormat
                .TextDirection = msoTextDirectionLeftToRight
                .Alignment = msoAlignCenter
            End With
            With .Characters.Font
                .BaselineOffset = 0
                .Bold = msoTrue
                .NameComplexScript = "+mn-cs"
                .NameFarEast = "+mn-ea"
                .Fill.Visible = msoTrue
                .Fill.ForeColor.RGB = RGB(0, 0, 0)
                .Fill.Transparency = 0
                .Fill.Solid
                .Size = 18
                .Italic = msoFalse
                .Kerning = 12
                .Name = "+mn-lt"
                .UnderlineStyle = msoNoUnderline
                .Strike = msoNoStrike
            End With
        End With
        
        ' 设置标题位置
        .ChartTitle.Left = 164.54
        .ChartTitle.Top = 7
    End With
End Sub

关键优化点

  • 避免Select/Selection:直接定义并引用Worksheet、ChartObject对象,操作更稳定,不会因上下文变化出错
  • 自动处理标题缺失:通过HasTitle检查,不存在则自动启用标题,从根源避免对象未设置错误
  • 灵活设置标题:示例中用InputBox让用户输入标题,也可以改成读取指定单元格的值(比如chartTitleText = targetSheet.Range("A1").Value),适配客户不同选择的需求
  • 明确对象引用:指定ThisWorkbook确保引用当前工作簿的工作表,避免跨工作簿错误

内容的提问来源于stack exchange,提问作者Michaelve

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:06:24