2017-04-18 16 views
1

私は文書上のすべてのテキストを検索し、すべてを曲線に変換するマクロを持っています。このマクロはまた、CQLの範囲外であるpowerclipを調べます。以下は参照されたオブジェクトは存在しませんか?

私のコードです:

Public Sub convertText() 
    Dim pg As Page 
    Dim shRange As ShapeRange 
    Dim sh As Shape 

    For Each pg In ActiveDocument.Pages 
     pg.Activate 
     Set shRange = FindAllPCShapes.Shapes.FindShapes(Query:="@type='text:artistic' or @type='text:paragraph'") 
     For Each sh In shRange 
      sh.ConvertToCurves 
     Next sh 
    Next pg 
End Sub 

Function FindAllPCShapes(Optional LngLevel As Long) As ShapeRange ' Shelby's function 
    Dim s As Shape 
    Dim srPowerClipped As New ShapeRange, srJustClipped As New ShapeRange 
    Dim sr As ShapeRange, srAll As New ShapeRange 
    Dim bFound As Boolean, i& 

    bFound = False 
    If ActiveSelection.Shapes.count > 0 Then 
     Set sr = ActiveSelection.Shapes.FindShapes() 
    Else 
     Set sr = ActivePage.Shapes.FindShapes() 
    End If 
    i = 0 
    Do 
     For Each s In sr.Shapes.FindShapes(Query:="[email protected]") 
      srPowerClipped.AddRange s.PowerClip.Shapes.FindShapes() 
     Next s 
     If srPowerClipped.count > 0 Then bFound = True: i = i + 1 
     If i = LngLevel And bFound Then Set FindAllPCShapes = srPowerClipped: Exit Function 
     bFound = False 
     srAll.AddRange sr 
     sr.RemoveAll 
     sr.AddRange srPowerClipped 
     If LngLevel = -1 Then srJustClipped.AddRange srPowerClipped 
     srPowerClipped.RemoveAll 
    Loop Until sr.count = 0 

    If LngLevel = -1 Then 
     Set FindAllPCShapes = srJustClipped 
    Else 
     Set FindAllPCShapes = srAll 
    End If 
End Function 

それはいくつかのケースで正常に動作しますが、私はshRangeの各SH「は、参照されるオブジェクトが存在しなくなった」というエラーが発生しますのためにいくつかのドキュメントでエラーをキャッチ。どうやらこれはpowerclipの中にネストされたグループのためです。

エラーを次回に追加することでエラーを無視しようとしましたが、マクロがうまく動作します。しかし、私は自分のコードで何がエラーなのかを知りたいので、将来のトラブルを避けることができます。マクロのすべてのエラーを無視しないでください。

ここでは、エラーを示すサンプルドキュメントを示します。 https://www.dropbox.com/s/lpi568eoltc8cxy/ReferenceError.cdr?dl=0

は、私が遭遇したと思うエラーが何もによるものであるあなたに

答えて

0

ありがとうFindShapesメソッドによって返されます。

ループのために、あなたはそれがませんかどうかを確認する必要があり前:

For Each pg In ActiveDocument.Pages 
    pg.Activate 
    Set shRange = FindAllPCShapes.Shapes.FindShapes(Query:="@type='text:artistic' or @type='text:paragraph'") 
    If Not shRange Is Nothing Then 
     For Each sh In shRange 
      sh.ConvertToCurves 
     Next sh 
    End If 
Next pg 
+0

まだ何もしていません。いや、それはshRangeをチェックすることはありませんので、エラーがforeachループ内で発生すると、もう一回何もありませんそれはループの中にあります。 –

+0

ファイルをテストするためにCorelDrawを使用しないでください。構文に基づいて、 'For sh in shRange.Shapes'がありますか? – PatricK

関連する問題