MW211 EXIT

devlog
ExcelVBA/選択とオブジェクト
2018年01月15日
選択中のものは、セルだけとは限らない。オブジェクトの場合もある。
オブジェクトも一つの種類のオブジェクトとは限らない。
但し、セルとオブジェクトを同時に選択することはない。
何を選択しているかは、「TypeName(Selection)」で確認すればよい。
なお、複数のオブジェクトを選択している場合には
その種類に差異があるかは不問で「DrawingObjects」となる。
┌──────┬───────┬──────────────┐
│セル        │Range         │                            │
├──────┼───────┼─────┬────────┤
│オブジェクト│DrawingObjects│TextBox   │テキストボックス│
│            │              ├─────┼────────┤
│            │              │Line      │直線            │
│            │              ├─────┼────────┤
│            │              │Rectangle │四角形          │
│            │              ├─────┼────────┤
│            │              │Oval      │円(楕円)        │
│            │              ├─────┼────────┤
│            │              │Picture   │画像            │
└──────┴───────┴─────┴────────┘

ということで、テキストボックスの数式を置換するマクロはこんな感じになる。
┌──────────────────────────────────────┐
│Public Sub テキストボックスの数式参照相対化()                               │
│    Dim theObject As Object                                                 │
│    Select Case TypeName(Selection)                                         │
│        Case "DrawingObjects"                                               │
│            For Each theObject In Selection                                 │
│                If TypeName(theObject) = "TextBox" Then                     │
│                    With theObject                                          │
│                        .Formula = Replace(.Formula, "$", "")               │
│                    End With                                                │
│                End If                                                      │
│            Next theObject                                                  │
│        Case "TextBox"                                                      │
│            With Selection                                                  │
│                .Formula = Replace(.Formula, "$", "")                       │
│            End With                                                        │
│        Case Else                                                           │
│            MsgBox "テキストボックスを選択してください"                     │
│            Exit Sub                                                        │
│    End Select                                                              │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA