ワークシート上のコネクタをクリックしてユーザーフォーム表示

昨日は、「図形の変更で切れたコネクタ接続」のつなぎ直しを行いました。

infoment.hatenablog.com

今日は、コネクタクリックによるユーザーフォーム表示に挑戦です。

今日やりたいこと

先日は、「処理」「分岐」「接点」のオートシェイプをクリックして、その結果をユーザーフォームに表示する機能を追加しました。

infoment.hatenablog.com

今日はこれを、コネクタについても実施します。

f:id:Infoment:20180930065827p:plain

必要なこと

  1. コネクタ用のユーザーフォーム表示検知用フラグを設ける
  2. コネクタ用のクラスモジュールを新規に準備する
  3. 描画したコネクタにクリック時の動作を追加する
  4. クリック時に動作するマクロを追加する
  5. ユーザーフォーム側を上記変更に合わせて調整する

1.コネクタ用のユーザーフォーム表示検知用フラグを設ける

ブロック用のときと同様、フラグで対応します。

【標準モジュール】
Option Explicit

Public SFC() As ShapeClass
Public EditChartFlag As Boolean
Public EChC As EditChartClass
' ↓今回の追加個所
Public EditConnectorFlag As BooleanPublic 
ECoC As EditConnectorClass
' ↑今回の追加個所

2.コネクタ用のクラスモジュールを新規に準備する

ブロック用のクラスモジュールに倣い作成しました。

【クラスモジュール】(EditConnectorClass)

量が多いので、↓こちらを参照して畳んでみました。
(情報、ありがとうございます)。
nn-hokuson.hatenablog.com

3.描画したコネクタにクリック時の動作を追加する

OnAction プロパティで、コネクタをクリックしたときに起動するマクロを、コネクタ描画時に設定します。

【クラスモジュール】(ShapeClass)
 Public Function DrawConnector(Optional connector_type As Long = 1, _
                               Optional begin_x As Double = 0, _
                               Optional begin_y As Double = 0, _
                               Optional end_x As Double = 100, _
                               Optional end_y As Double = 100) As Shape
                               
    Set DrawConnector = ActiveSheet.Shapes.AddConnector(connector_type, _
                                                        begin_x, _
                                                        begin_y, _
                                                        end_x, _
                                                        end_y)
        ' ↓今回の追加個所
        DrawConnector.OnAction = "SelectConnector"
        ' ↑今回の追加個所
    With DrawConnector.Line
        .EndArrowheadStyle = msoArrowheadTriangle
        .ForeColor.ObjectThemeColor = msoThemeColorText1
    End With
                               
 End Function

4.クリック時に動作するマクロを追加する

全てクラスモジュールに委ねたため、こちらは非常にスッキリしています。

【標準モジュール】
Public Sub SelectConnector()
    On Error GoTo er:
    Set ECoC = New EditConnectorClass
    
    ECoC.ConnectorName = Application.Caller
    ECoC.ClickedConnector.Select
    ECoC.UpdateConnectorList    
er:
    Debug.Print Err.Number
End Sub

5.ユーザーフォーム側を上記変更に合わせて調整する

こちらも全てクラスモジュールに委ねたため、閑散としています。

【ユーザーフォームのモジュール】(EditConnectorForm)

ユーザーフォームの初期化

Private Sub UserForm_Initialize()
    StartSpinButton.Value = StartSpinButton.Max / 2
    EndSpinButton.Value = EndSpinButton.Max / 2
End Sub

「×」ボタンで閉じたときのフラグ変更

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then
        EditConnectorFlag = False
    End If
End Sub

結果

コネクタをクリックすることで、編集用のユーザーフォームを表示させられるようになりました。
f:id:Infoment:20180930074320p:plain

(相変わらず、静止画像では伝わりにくい。動画を載せる方法を決めないと!)

参考まで。