dポイントプレゼントキャンペーン実施中!

こんにちは、エクセルのチェックボックスをひとつのボタンでON OFF したいのですが、詳しい方教えて頂けませんか?

チェック11_Click
チェック12_Click
チェック13_Click

チェック39_Click
チェック40_Click

この5個のボックスを、一つのボタンで一括ON もう一度押すと 一括OFFとしたいのです。


以前教えて頂いた

Dim i As Integer
With ActiveSheet
For i = 11 To 13
If .CheckBoxes(i) = xlOn Then
.CheckBoxes(i) = xlOff
Else
.CheckBoxes(i) = xlOn
End If
Next i
End With

が何故かエラーが出てしまい使えずに困っています。
出るエラーは 【 Worksheet クラスの Check Boxes プロパティを取得できません 】との事です。

詳しい方、よろしくお願いいたします。

A 回答 (6件)

No4でオブジェクト名を直接セルに入力するようにしておりましたが


ワンクッション入れてなんとか走るようになりました

Sub test()
Dim SHAPEOBJ As Shape
Dim KMG As String
Dim CT As Long
With ActiveSheet
CT = 0
For Each SHAPEOBJ In .Shapes
KMG = SHAPEOBJ.Name
.Range("WS20").Offset(CT,0) = KMG
CT = CT + 1
Next SHAPEOBJ
End With
End Sub

これの記述で問題なく動作しましたので、セル"WS20"から下に全オブジェクト名が抽出できると思います
    • good
    • 0
この回答へのお礼

再々度の回答を頂き、ありがとうございます。

試してみたいと思います、今しばらくお待ちただけますでしょうか。

よろしくお願いいたします。

お礼日時:2015/11/14 14:46

No4 です



私の勉強不足でした。
セルに落とし込む記述がおかしいようです
この部分を修正するスキルを持っておりません

申し訳ありません
    • good
    • 0

変数CTの宣言とCTの初期値を0にする記述が抜けていますね


それにチェックボックスの数をカウントする記述CT=CT+1の部分もですね

sub test()
Dim SHAPEOBJ As Shape
Dim CT As Long
With ActiveSheet
CT=0
For Each SHAPEOBJ In .Shapes
.Range("WS20").Offset(CT,0)=SHAPWOBJ.Name
CT=CT+1
Next SHAPEOBJ
End With
end sub

No2の回答で欠番が複数あったらと書きましたが間違いでした
この記述では欠番を探すのではなく、全チェックボックス名を取得する記述でした(>_<)

ちなみに、シートにオブジェクトを挿入する現在シート上に存在するオブジェクト番号のMAX番号の次の番号がふられるように思います。
確実にオブジェクト(チェックボックス)を連番で配置したいのであれば、一旦全てのチェックボックスを削除してエクセルを保存終了してから新しく配置されてはいかがでしょう。
    • good
    • 0

No2の修正です



>.Range(WS20).value=SHAPWOBJ.Name
セル番地を「”」でかこってください
.Range("WS20").value=SHAPWOBJ.Name

.Range("WS20").Offset(CT,0)=SHAPWOBJ.Name

失礼しました<(_ _)>
    • good
    • 0
この回答へのお礼

再回答頂き、ありがとうございます。

sub test()
Dim SHAPEOBJ As Shape
With ActiveSheet
For Each SHAPEOBJ In .Shapes
.Range("WS20").Offset(CT,0)=SHAPWOBJ.Name
Next SHAPEOBJ
End With
end sub


こういう事でしょうか?
やってみたのですが、オブジェクトのエラーが出てしまうようです。


更に問題が・・・・

ON/OFFボタンはたくさん作っているのですが、現在機能しているボタンとボックスのセットをそのままにして、機能していない物を削除しました。
さらに、新しく作ったボックスにボタンを割り当てたのですが、今作ったばかりのボタンが動かないんです。

何度も確認してみたのですが・・・
何か原因は考えられるでしょうか?

ちなみに、動いているコードも、動かないコードも

Dim i As Integer
With ActiveSheet
For i = 11 To 15
If .CheckBoxes(i) = xlOn Then
.CheckBoxes(i) = xlOff
Else
.CheckBoxes(i) = xlOn
End If
Next i
End With

を利用しています。

お礼日時:2015/11/12 23:30

No1です



セルに表示させるのでしたら
.Range(WS20).value=SHAPWOBJ.Name

欠番が複数ありそうなら
sub test()
Dim SHAPEOBJ As Shape
Dim CT As Long
With ActiveSheet
CT=0
For Each SHAPEOBJ In .Shapes
.Range(WS20).Offset(CT,0)=SHAPWOBJ.Name
CT=CT+1
Next SHAPEOBJ
End With
end sub

と欠番があった場合にCTの値を1加算して、入力するセルの行数を変数として扱えば1行ずつズレて入力していきます
    • good
    • 0

チェックボックスの番号が変数[i]に格納されていますが、チェックボックス11~13までの連続した番号になっています


提示されたソースで問題なく走りますので、チェックボックスを削除され新たに別のチェックボックスを作成された場合連番ではなくなります。
sub test()
Dim SHAPEOBJ As Shape
With ActiveSheet
For Each SHAPEOBJ In .Shapes
MsgBox SHAPEOBJ.Name
Next SHAPEOBJ
End With
end sub

このソースでチェックボックスの番号を確認して連番になってるか、途中の番号がなくなっていないかを検証してみてください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

おそらく、連番が解けているようです、ありがとうございます。

それで1点教えて頂ければ嬉しいのですが、メッセージボックスではなく セルに出力する方法は有るでしょうか?

見よう見まねで Range(WS20)SHAPWOBJ.Name

なんてやってみましたが、ダメみたいです。

お手数ですが教えて頂けませんでしょうか。

よろしくお願いいたします。

お礼日時:2015/11/12 14:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!