セルを選択しているか確認する
VBAで処理中を行う際に、今何を選択しているのかが知りたいことがあります。
セルの値を扱うVBAが多くなるとは思いますが、場合によってはオートシェイプをたくさん利用しているシートもあります。
そのような場合に、オートシェイプを選択したままの状態では処理を続行できないことがあります。
コード
以下のコードはセル以外が選択されている場合の判定に使用します。
このisCell関数単体で何かを行うのではなく、他の処理でセルが選択されているかどうかの判定が必要な場合に利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Public Function isCell(a_Selection) As Boolean Dim sType '// 選択箇所の種類 sType = TypeName(a_Selection) '// セルが選択されていない場合(セルが選択されていればTypeNameで"Range"が戻される) If (sType <> "Range") Then isCell = False Exit Function End If isCell = True End Function |
利用方法
以下が利用例になります。
ボタンを押して行の高さを変える処理を例にします。
ボタンが3つあるフォームを用意して、それぞれのボタンの名前をcmd0x、cmd1x、cmd2xという名前にします。
それぞれのボタンの処理から行の高さを変えるSetRow関数を呼びます。
そのSetRow関数でセルが選択されているかの判定に前述の関数を呼び出しています。
セルが選択されていない場合は行の高さを変えません。
セルが選択されている場合は行の高さを変えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Private Sub cmd0x_Click() Call SetRow(0) End Sub Private Sub cmd1x_Click() Call SetRow(1) End Sub Private Sub cmd2x_Click() Call SetRow(2) End Sub Private Sub SetRow(a_x) If (isCell(Selection) = False) Then Exit Sub End If Selection.RowHeight = CStr(CDbl(12) * a_x) End Sub |