2015-11-20 96 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

完美地工作,謝謝 –