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

Excel中组合形状时触发Index is out of bounds错误的问题排查

Excel VSTO中形状组合时"索引越界"错误的解决方法

你在尝试将创建的形状组合时遇到"Index is out of bounds"错误,核心问题是传递给Shapes.Range()的数组结构不正确。

错误原因

你的代码中midobj被定义为一维数组,但你给midobj(0)赋值了一个新的Object数组New Object() {line1},这使得midobj变成了二维数组。而Shapes.Range()要求传入的是一维数组,元素可以是Shape对象、形状名称字符串或者形状索引数值,二维数组会导致方法无法正确解析,从而抛出索引越界错误。

解决方案

调整数组结构,直接将Shape对象存入一维数组即可。

修改后的单形状组合代码

Public Sub Test()
    Dim wb As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
    Dim sht As Excel.Worksheet = CType(wb.ActiveSheet, Excel.Worksheet)

    Dim shapeArray() As Excel.Shape
    Dim line1 As Excel.Shape = sht.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeLineCallout1, 100, 10, 110, 10)
    
    ' 初始化一维数组并添加形状对象
    ReDim shapeArray(0)
    shapeArray(0) = line1

    ' 直接传递一维数组给Range方法
    sht.Shapes.Range(shapeArray).Group()
End Sub

如果仅需组合单个形状,还可以直接调用形状自身的Group()方法:

line1.Group()

多形状组合示例

如果后续需要组合多个形状,只需扩展一维数组即可:

Public Sub TestMultipleShapes()
    Dim wb As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
    Dim sht As Excel.Worksheet = CType(wb.ActiveSheet, Excel.Worksheet)

    Dim shapeArray() As Excel.Shape
    Dim line1 As Excel.Shape = sht.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeLineCallout1, 100, 10, 110, 10)
    Dim rect1 As Excel.Shape = sht.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeRectangle, 200, 10, 50, 50)
    
    ' 初始化数组容纳两个形状
    ReDim shapeArray(1)
    shapeArray(0) = line1
    shapeArray(1) = rect1

    sht.Shapes.Range(shapeArray).Group()
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:05:15