「エクセルを用いてチェックボックスが並んだ書類があります。チェックする
項目のパターンが決まっているので、毎回マウスを移動してチェックするの
が面倒です。ワンクリックで複数のチェックがかけられるようにしたい
のですが、よい方法は無いでしょうか?」
ほぼ類似の質問で、以前、別の人の質問
https://oshiete.goo.ne.jp/qa/3676289.html
に対してベストアンサーで示されていますが、これは、同一ブックの同一シートなどから
は対応できます。しかし、今回は会社の既存の帳票にマクロ(VBA)を埋め込まずに処理
したいので、別のブックにマクロ(VBA)を作成して処理したいと考えています。当該
コードを下記のようにアレンジしてみましたが、うまくいきません。
(例)
話の簡単のために、まずはチェックボックスのチェックを一括で外すことを試みます。
【帳票.xlsx】
例えば、ワークシートにチェックボックス(開発のデザインタブから貼り付けたもの)
が5個並んでいます。このうち、数個に既にチェックがついています。
【マクロ埋め込み.xlsm】
Sub Check_Off_All()
Dim wsKitReq As Worksheet
Set wsKitReq = Workbooks("帳票.xlsx").Worksheets("sheet1")
'コントロールツール
Dim ctrl As Object
For Each ctrl In wsKitReq.OLEObjects
If TypeOf ctrl.Object Is MSForms.CheckBox Then
ctrl.Object.Value = False
End If
Next ctrl
End Sub
上のようにすると、実行後に「ユーザー定義型は定義されていません。」が出てしまいます。
(*1) For Nextの行を外すと処理できますが、ワークシート内に他のオブジェクト(例えば、
テキストボックスがあると、[False]のように表示されてしまうのでチェックボックスだけ
を抽出して処理することは必須になります。
(*2) ちなみに全く同様のコードを【帳票.xlsx】のsheet1にワークシートマクロとして埋め
込むと全く問題なく動きますので、コーディングが根本的に誤っているとは考えにくい
ところです。
No.1ベストアンサー
- 回答日時:
こんにちは。
直してみました。
原因は、TypeOf は、そのオブジェクトの上位のクラスを読むものですが、他ブックからですと、共有していませんから、そのクラスを見つけることができないからだと思います。間違った考えかもしれませんが、例えでいうなら、親が誰かわかっているところで、その子供の親を識別できるけれども、子供だけだと、誰の親か分からない、という所ではないでしょうか。
'//
Sub Check_Off_All()
'No. 9059904
Dim ctrl As Object
Dim wsKitReq As Worksheet
Set wsKitReq = Workbooks("帳票.xlsx").Worksheets("sheet1")
'コントロールツール(OleObjects)
For Each ctrl In wsKitReq.OLEObjects
If TypeName(ctrl.Object) = "CheckBox" Then
ctrl.Object.Value = False
End If
Next ctrl
End Sub
'決まった所にチェックを入れる
Sub Test2b()
''No. 9059904-2
Dim i As Variant
Dim wsKitReq As Worksheet
Set wsKitReq = Workbooks("帳票.xlsx").Worksheets("sheet1")
For Each i In Array(1, 3)
wsKitReq.OLEObjects("CheckBox" & i).Object.Value = True
Next i
End Sub
'///
参考:
https://msdn.microsoft.com/en-us/library/s4zz68x …
WindFallerさん
早速のご回答ありがとうございます。
いろいろ使えるサンプルを探して一番望んだ形に近いものものがここのサイトにあったのですが、望んだものにするために3時間ほど考え込んでみたのですが、この一見シンプルで難解な問題を解決することは不可能と考えて投稿してみることにしました。感謝いたします。
ちなみに会社の既存の帳票を壊すことなく、効率的に正確に入力することは緊急課題でしたので助かります。
次は、指定した箇所を別シートで入力した表に従ってチェックするコーディングに移ってみようと思います。先のような7個くらいあるチェックボックスが最大20個くらい同じように並んでいるので、マウスを移動しながらのチェック140個と正確にいうのはステータスの変化にともなう修正などを考えると非常に困難です。
繰り返しになりますが、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のシートのクリ...
-
Excelで数字を入れたら対応する...
-
【エクセル】フリーワード検索...
-
Excelのシート上のShapeにイベ...
-
エクセルファイルを開いた回数...
-
行事予定表の作成でご教示下さい
-
EXCELのダイアログシートって、...
-
Excelマクロでブック全体を検索...
-
エクセルで○をつけるマクロ設定
-
エクセルのマクロの実行が途中...
-
セルの一部分だけを太字にする方法
-
Excelでセル内の文字をファイル...
-
Excelでランダムで選んだ行を別...
-
エクセルVBAでOUT LOOKメールに...
-
任意のセルに貼り付けをするマ...
-
車番順に平均値を計算したい
-
エクセルの在庫表をマクロで
-
エクセルでランダムな座席表を...
-
【図(1)】の値を【図(2)】【図(...
-
excel定数の違いについて。xlAu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
Excelで数字を入れたら対応する...
-
エクセルで複数のシートのクリ...
-
エクセルファイルを開いた回数...
-
フォルダ内にある全ファイルの...
-
Excelのシート上のShapeにイベ...
-
エクセル シート内の一番下のセ...
-
長い時間かかるマクロが実行中...
-
セルの一部分だけを太字にする方法
-
【エクセル】フリーワード検索...
-
エクセルで特定の行だけ行削除...
-
エクセル:セル内の文字列の最...
-
EXCELのダイアログシートって、...
-
【エクセル】「実行時エラー’10...
-
Excelでセル内の文字をファイル...
-
エクセルで○をつけるマクロ設定
-
エクセル マクロ 一定時間おき...
-
前月分を次月シートに繰越でき...
-
エクセルのワークシート(テン...
-
自分の専門分野の仕事。初見で...
おすすめ情報