ワークシート上のコネクタをクリックしてユーザーフォーム表示
昨日は、「図形の変更で切れたコネクタ接続」のつなぎ直しを行いました。
今日は、コネクタクリックによるユーザーフォーム表示に挑戦です。
今日やりたいこと
先日は、「処理」「分岐」「接点」のオートシェイプをクリックして、その結果をユーザーフォームに表示する機能を追加しました。
今日はこれを、コネクタについても実施します。
必要なこと
- コネクタ用のユーザーフォーム表示検知用フラグを設ける
- コネクタ用のクラスモジュールを新規に準備する
- 描画したコネクタにクリック時の動作を追加する
- クリック時に動作するマクロを追加する
- ユーザーフォーム側を上記変更に合わせて調整する
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
結果
コネクタをクリックすることで、編集用のユーザーフォームを表示させられるようになりました。
(相変わらず、静止画像では伝わりにくい。動画を載せる方法を決めないと!)
参考まで。