|
オートシェイプで作成したフローから文字列を取り出したいです。
ただし、文字列が含まれるものや含まれないものが混在する状態です。
以下のようなVBAコードを作成しましたが、テキストが入力されてない
オートシェイプで「型が一致しません」エラーが発生します。
ローカルウィンドウで変数を参照すると「: Text : <アプリケーション定義またはオブジェクト定義のエラーです。> : String」
という表示になっています。
元々はフローにて使用するオートシェイプは決まっているので、
AutoShapeTypeで関係ないものや、明らかにテキストが存在しないものは
省いているのですが、資料の見易さのために配置されたオートシェイプが存在し、テキストが入力されてないところで実行時エラーとなります。
On Error Resume Nextで検知できるかとも思ったのですが、機能していません。
事前にテキストの有無を検知できればエラーを回避できるかと色々
試してみましたが、これ以上の策が思いつきません。
アドバイスあればご教授願いたく。
※インプットファイルは業務フローです。
Excelで書くな、というのももっともな意見ですが……
【作成ソース】
Private Sub ReadProcessFlowSheet(objSheetIN As Excel.Worksheet, objSheetOUT As Excel.Worksheet, sFile As String, lRow As Long)
On Error Resume Next
Dim sType As String
Dim sText As String
Dim objChar As Excel.Characters
Dim objShape As Excel.Shape
For Each objShape In objSheetIN.Shapes
With objShape
sText = ""
sType = ""
Select Case .AutoShapeType
Case msoShapeDiamond
sType = "フロー内接続端子(情報)"
Case msoShapeOval
sType = "フロー内接続端子(プロセス)"
Case msoShapeHexagon
sType = "画面"
Case msoShapeCan
sType = "データベース"
Case msoShapePlaque
sType = "リアルバッチ"
Case msoShapeUTurnArrow
sType = "問題存在箇所に戻る"
Case msoShapePentagon
sType = "前工程(後工程)フローからのつなぎ"
Case msoShapeFlowchartProcess
If .ShapeRange.Line.Style = msoLineThinThin Then
sType = "別フロー"
Else
sType = "バッチ"
End If
Case msoShapeFlowchartPredefinedProcess
sType = "人の作業"
Case msoShapeFlowchartDocument
sType = "リスト・帳票"
Case msoShapeFlowchartStoredData
sType = "インターフェースファイル"
Case msoShapeRectangularCallout
sType = "補足説明1"
Case msoShapeCloudCallout
sType = "補足説明2"
Case Else
'***対象外のオブジェクト
sType = ""
End Select
'***対象オブジェクトの場合のみテキストの取得を実施
If sType <> "" Then
'***テキストが取得できる場合のみ
Set objChar = .TextFrame.Characters
If Err Then
sText = "テキストなし"
Err.Clear
Else
sText = CStr(objChar.Text) '***←ここで「型が一致しません。」エラーが発生
End If
Call WriteShapeInfo(objSheetIN, objSheetOUT, objShape, sType, sText, sFile, lRow) '***これが本命の処理だが、そこまでたどり着かない
lRow = lRow + 1
End If
End With
Next objShape
End Sub
|
|