これ以外にチェックボックスがうまく動かないケース
Excelのチェックボックスがチェックできない時の対処法 Office Hack
これ以外にもあるということが判明した。
例えば、別のシートのセルにリンクを貼っていたのに、そのシートを削除したような場合、リンクがきれてエラーになっている。
このような場合、エラーメッセージもなにも表示されない。
ひどいときはプロパティすら表示されない。(なぜか一度プロパティを表示させると、数式バーにエラーが出現する)
これで手動で消去してもよい。
しかしプロパティの表示は面倒だし、なぜかプロパティの表示がエラーになる場合もある。
ここで言っているチェックボックスはForm2.0を参照したときのものではない
【エクセル】フォームコントロールのチェックボックスを使ってみよう!
フォーム コントロールや ActiveX コントロールを選択できない
まず、選択するコントロールの種類を決定します。 一意に変更できるコントロールとオブジェクトには 3 種類あるため、見ているだけでどの種類のコントロールなのかが分からない場合があります。 操作しているコントロールの種類を確認するには、コントロールを右クリックし、次の点に注意してください。
- ショートカット メニューに [マクロの登録] が表示される場合、そのコントロールはフォーム コントロールです。
-
ヒント: グループ ボックスフォーム コントロールの正しいショートカット メニューを表示するには、グループ ボックスの内側ではなく、グループ ボックスの境界を選択してください。
- ショートカット メニューに [プロパティ]コマンドが含まれている場合、コントロールはActiveXコントロールExcelデザイン モードです。
- ショートカット メニューに [テキストの編集] コマンドが含 まれている場合、オブジェクトは描画ツール オブジェクトです。
ポイントとコード
ポイント
Excelのフォーム コントロールのチェックボックスのリンク先セルのプロパティ
Shp.linkedCell
ではなく
Shp.ControlFormat.LinkedCell
このリンクを消すので
Shp.ControlFormat.LinkedCell = ""
となる。
~~現在リンク切れ。~~復活しました
Shape.ControlFormat プロパティ
https://docs.microsoft.com/ja-jp/office/vba/api/excel.shape.controlformat
コントロールの名前が日本語で表示されても英語の時がある
また図形名が名前ボックス日本語でチェックボックスと書いていてもVBAではCheck Boxという名前で認識される場合がある。
画像(図形)の名前は2種類ある
と説明されているが
間違いなくバグである。しかもMicrosoftが仕様と言いはる系のバグである。
これと似ているのが
NumberFormatLocalとNumberFormatである。
NumberFormatと同様に
本来は2つのプロパティのNameとNameLocalに分かれるのに、名前ボックスにはNameLocalしか表示されない、ということになる。
コード
実際は除外等が必要になるので、バックアップをとって実験してから使用してください。
大抵の場合、リンクには重要な意味があるので、なんでも消してしまうとあとから困ることが多い。
Sub DellinkedCellAddress()
' For Microsoft Excel VBA
' アクティブシートのすべてのコントロールのチェックボックスのリンク先セルアドレスを消去するマクロ。
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = ActiveSheet
Dim shp As Shape
For Each shp In ws.Shapes
If shp.Name Like "Check Box*" Then
Debug.Print shp.Name & "Linkedcell Deleting..."
shp.ControlFormat.LinkedCell = ""
Else
Debug.Print shp.Name
End If
Next
End Sub
それにしてもリンク先がなくなるなどしてエラーを起こすとチェックボックスにチェックを入れることができないというのは驚いた。
しかもエラーもなにも表示されず、チェックボックスがOnにならない。
さらにプロパティを表示させようとしてもエラーになる場合すらある。
このマクロはチェックボックスの不具合をすべて解消するものではないので、かならず原因を特定し、エラーや余計なものを削除しないように設定を加えて使用する必要がある。