0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Excel VBA チェックボックスがリンク切れでOnにならない場合のリンク先セルアドレスを消去するマクロ

Last updated at Posted at 2021-12-16

これ以外にチェックボックスがうまく動かないケース

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という名前で認識される場合がある。

VBA|クリックした図形の名前の取得方法

画像(図形)の名前は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にならない。
さらにプロパティを表示させようとしてもエラーになる場合すらある。
このマクロはチェックボックスの不具合をすべて解消するものではないので、かならず原因を特定し、エラーや余計なものを削除しないように設定を加えて使用する必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?