错误处理程序无法处理“438运行时错误”

时间:2015-11-20 20:22:02

标签: excel vba excel-vba

我有一个循环遍历工作表中形状的脚本,将图像属性抓取到picHeightpicWidth变量中:

  ws.Shapes(myImg.ID).Select

         With Selection

                killer = IsError(.ShapeRange.Height)

            If IsError(.ShapeRange.Height) = True Then
                GoTo badShape
            End If


            PicHeight = .ShapeRange.Height

            PicWidth = .ShapeRange.Width

        End With

有时形状不是图片(工作表上也有图表和文本框),VBA不断抛出“438错误”(对象不支持此属性或方法)即使添加on error resume next以及我上面的错误处理程序。当选择对象没有.shaperange.heightshaperange.width属性时,会出现此问题。

似乎VBA甚至无法将代码交给错误处理程序,只是因为选择没有选定的成员。

1 个答案:

答案 0 :(得分:3)

如果您只使用from twx.botapi.botapi import Error, Message if issubclass(r, Error): print('Error!') else: print('success!') &而我认为您不需要错误处理.Height属性(而不是.Width.ShapeRange.Height 我刚刚对图表,矩形,图片和表格标签进行了以下测试:

.SHapeRange.Width

得到以下结果:

Sub Shapes()

Dim sh As Shape
Dim wa As Worksheet

Set ws = Sheet1

For Each sh In ws.Shapes

    Debug.Print sh.Name & ": " & sh.Height
    Debug.Print sh.Name & ": " & sh.Width

Next

End Sub

因此,您的代码可以简化为:

Chart 1: 216
Chart 1: 360
Rectangle 2: 72
Rectangle 2: 72
Picture 3: 218
Picture 3: 379
Label21: 18
Label21: 72