Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


17118 / 76732 ←次へ | 前へ→

【65071】テキスト入力済みと未入力が混在するオートシェイプからのテキスト取得方法
質問  rx-78gp03d  - 10/4/11(日) 23:41 -

引用なし
パスワード
   オートシェイプで作成したフローから文字列を取り出したいです。
ただし、文字列が含まれるものや含まれないものが混在する状態です。

以下のような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
0 hits

【65071】テキスト入力済みと未入力が混在するオートシェイプからのテキスト取得方法 rx-78gp03d 10/4/11(日) 23:41 質問
【65072】Re:テキスト入力済みと未入力が混在するオ... ichinose 10/4/12(月) 6:51 発言
【65073】Re:テキスト入力済みと未入力が混在するオ... 独覚 10/4/12(月) 10:15 発言

17118 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free