コネクタのタイプを直線 ⇔ カギに変更する
昨日は、ユーザーフォームのリストボックスから、ワークシート上のコネクタを選択してみました。
今日は、選択したコネクタのタイプ変更に挑戦です。
今日やりたいこと
コネクタがオートシェイプに接続されている始端・終端を変更したとき、直線からカギ形に(或いはその逆に)変更したい場合があります。そこで今回は、選択した任意のコネクタを変更する機能を追加します。
必要なこと
- 置き換える「操作」の検討
- 置き換える「方法」の検討
1.置き換える「操作」の検討
直線なのかカギなのか、直感的に操作できた方が分かり易い。そこで、オプションボタンを設置して切り替えることにしました。
ついでにコネクタを選択した際、オプションボタンの値も自動で追従してくれると分かり易いかも。ということでクラスモジュールに、コネクタのタイプを引数としてオプションボタンを変更させるサブプロシージャを追加しました。
【クラスモジュール】(EditConnectorClass)
Public Sub ChooseOptionButtonAboutConnectorType(type_index As Long) Select Case type_index Case msoConnectorStraight EditConnectorForm.OptionButtonStraight.Value = True Case msoConnectorElbow EditConnectorForm.OptionButtonElbow.Value = True End Select End Sub
標準モジュールの、OnActionプロパティでコネクタに登録したマクロも修正です。
【標準モジュール】
Public Sub SelectConnector() On Error GoTo er: Dim ECoC As EditConnectorClass Set ECoC = New EditConnectorClass ECoC.ConnectorName = Application.Caller ECoC.ClickedConnector.Select ECoC.UpdateConnectorList ' ↓↓今回の追加個所↓↓ Dim TypeIndex As Long TypeIndex = ECoC.ClickedConnector.ConnectorFormat.Type Call ECoC.ChooseOptionButtonAboutConnectorType(TypeIndex) ' ↑↑今回の追加個所↑↑ Exit Sub er: Debug.Print Err.Number End Sub
コネクタのタイプは、ConnectorFormat.Typeで取得可能で、今回用いるのは以下の二つです。
msoConnectorStraight | 直線 |
msoConnectorElbow | カギ |
【ユーザーフォームのモジュール】(EditConnectorForm)
併せて、リストボックスで選択した際にも、オプションボタンを切り替えます。
Private Sub ListBox2_Change() On Error Resume Next Dim ConnectorName As String ConnectorName = ListBox2.List(ListBox2.ListIndex) If Err.Number = 381 Then Exit Sub End If Set SC = New ShapeClass Set SC.myShape = ActiveSheet.Shapes(ConnectorName) SC.myShape.Select Set ECoC = New EditConnectorClass With ECoC .ConnectorName = ConnectorName Set start_shape = .start_shape StartPosition = .StartPosition Set end_shape = .end_shape EndPosition = .EndPosition Call .ControlAddChartButton End With '↓↓今回追加した箇所↓↓ Dim TypeIndex As Long TypeIndex = SC.myShape.ConnectorFormat.Type Call ECoC.ChooseOptionButtonAboutConnectorType(TypeIndex) '↑↑今回追加した箇所↑↑ End Sub
これで、現状に追従して情報を表示するオプションボタンが準備できました。
2. 置き換える「方法」の検討
ConnectorFormat.Type でコネクタの形状がわかるなら、逆にこれを変更すれば形が変わるのでは?そう考えて試したところ、その通りでした。呆気ないぐらい。
そこで、オプションボタンのクリックイベントで、コネクタの形状を変更することにしました。
【ユーザーフォームのモジュール】(EditConnectorForm)
オプションボタンの値と、選択中のコネクタの情報で、形状を変更すべきか否かを判断します。例えば直線のオプションボタンが選択されていて、且つ選択中のコネクタがカギであれば、それは直線に変更せよという操作と見なすわけです。
' 直線用オプションボタン Private Sub OptionButtonStraight_Click() If OptionButtonStraight.Value = True And _ SC.myShape.ConnectorFormat.Type = msoConnectorStraight Then Exit Sub End If Call ReConnect End Sub ' カギ用オプションボタン Private Sub OptionButtonElbow_Click() If OptionButtonElbow.Value = True And _ SC.myShape.ConnectorFormat.Type = msoConnectorElbow Then Exit Sub End If Call ReConnect End Sub ' コネクタの形状変更 Private Sub ReConnect() Dim ConnectorType As Long Select Case OptionButtonStraight.Value Case True ConnectorType = msoConnectorStraight Case Else ConnectorType = msoConnectorElbow End Select SC.myShape.ConnectorFormat.Type = ConnectorType End Sub
結果
選択したコネクタの形状について、直線またはカギへ任意に変更できるようになりました。
次回に続きます。
参考まで。