2015-11-20 71 views
0

我有一个脚本,通过形状的纸张循环,抓住图像属性为picHeightpicWidth变量工作:错误处理程序不是“438运行时错误”

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根本无法将代码交给错误处理程序,因为选择中没有选定的成员。

+0

尝试[this](http://stackoverflow.com/questions/3440735/vba-error-handling-not-working-in-excel/3440789#3440789),看看是否有助于错误处理。 –

+0

之前我已经碰到过,不幸的是这次不是这种情况。 –

回答

3

我不认为如果你只是使用.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 

所以,你的代码可以简化为:

With ws.Shapes(myImg.ID) 

    PicHeight = .Height 
    PicWidth = .Width 

End With 
+1

完美地工作,谢谢 –