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
相关产品推荐
相关产品推荐

