A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
良く質問にある例で
何がしたいかが,広く説明されてないので、回答者に手間を取らせているように思う。
質問者の我流(まずい狭い考えをいている場合が多いから)でコード上でどうしたいか、書くのでなく、内容的にどうしたいかを書くべきだ。私の持論です。
ーー
本件私も良くわからないが、私の例では
セルB1に「京都」と入れている
コントロールツールボックスの方のチェックボックスを3個貼り付け、それぞれのチェックボックスについて、大阪、神戸、京都とプロパティの「オブジェクト名」(Captionでない)をそのように変えた。
Sub test01()
x = Cells(1, "B") '現在値は「京都」
'MsgBox Worksheets("Sheet1").京都.Value 'OK
'MsgBox Worksheets("Sheet1").OLEObjects(3).Value
'MsgBox Worksheets("Sheet1").OLEObjects("京都").Object.Value 'OK
'Worksheets("Sheet1").x.Value
'Worksheets("Sheet1").Controls("京都").Value
'Worksheets("Sheet1").CheckBoxes("京都").Value
'Worksheets("Sheet1").DrawingObjects(3).Value
'With Worksheets("Sheet1")
'Msgbox .CheckBoxes("京都").Value
'End With
MsgBox Worksheets("Sheet1").OLEObjects(x).Object.Value 'OK
End Sub
これで京都チェックボックスが、
チェックされていたらーーTrue
Offで在ればーーFalseと
表示された。
コメントアウトした書き方はOKと書いたもの以外は、すべてエラーだった。
この.Objectが必要な点が曲者じゃないですか。
上記コードのxで「変数名を使用」したことになるのかな>
No.5
- 回答日時:
細かい説明は後にしますが、以下で試してみてください。
掲示板やWebサイトで、拾い読みしても、上手く行きません。このような方法は、古い方法で、Excelの95~97のテクニックです。
'//標準モジュールに貼り付けてください。
Sub CheckBoxesAdding()
'チェックボックスを取り付ける
Dim j As Long
Dim Cb As Object
Dim TempName As String
For j = 1 To 5 '←現在5個です。
TempName = "CheckBox" & j
With Cells(j, 2).Resize(, 2)
Set Cb = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
End With
With Cb
.Name = TempName
.OnAction = ThisWorkbook.Name & "!CheckBoxMacro"
.Caption = TempName
End With
Next j
End Sub
Sub CheckBoxMacro()
'チェックボックスのマクロ
Dim TemName As String
TempName = Application.Caller
If ActiveSheet.CheckBoxes(TempName).Value = xlOn Then
MsgBox "True 処理"
Else
MsgBox "False 処理"
End If
End Sub
Private Sub TestCBClear()
'不要のチェックボックス削除
ActiveSheet.CheckBoxes.Delete
End Sub
OLEObject と以下のようなフォームツールとは、まったく違う仕様です。同じコードをOLEObject で作ると、ワンランク上位のコードになりますが、OLEObject のコードも、あまり探しても出てこないと思います。最初は、教わらないとなかなか出来ませんね。私の場合は、Ver,5の上級テクニックの本を持っていますが、今は、手に入りません。
No.4
- 回答日時:
>TempNameはチェックボックスの名前が入っている変数になります。
私が、#2で書いた方法で、それが解決が出来ないというなら、もう少し、前の段階から説明しないといけないようです。「TempName が何を入れているのか分かりません」の私の問いかけに対して、「チェックボックスの名前」が入っているというでは、こちらの思惑とは違います。そのエラーは、正しい名前が入っていないことを意味しています。だから、正しい名前を入れていれば、エラーは発生しません。
ただ、こちらからでは、変数を使う必要性とか、ご質問からは見えてきません。ループを目的としない場合に、OLEObjectsのコレクションから、そこに変数を入れるということは、まったくといってしないのです。
つまり、
TempName = "CheckBox1"
Worksheets("Sheet1").Select
If ActiveSheet.OLEObjects(TempName).Object.Value = True Then
というような書き方は普通はしません。
また、キャプション名:cn.Object.Caption と、オブジェクト名:cn.Nameとは別ものです。
If Worksheets("Sheet1").CheckBox1.Value = True Then
とすればよいだけです。
あえて、複数のオブジェクトに対して、ピンポイントにするなら、Index を利用します。ただし、他のOLEObjectがないことが条件ですから、他にコントロールツールがあるなら、本来は、他のコントロールツールと区分けをする必要があります。オブジェクトに並べ替えをしなければ、左上から下に、そして右の列に、番号が振られます。
TempName = 1
If Worksheets("Sheet1").OLEObjects(TempName).Object.Value = True Then
'処理)
Else
'処理)
End If
ただ、もしご質問者さんに譲歩して、オブジェクト名を入れる場合は、まず、正しい名前を取得しなければなりません。それには、このような方法があります。これで、名前を確認してください。
Sub Test3()
'検査用マクロ
Dim cn As Object
With ActiveSheet
For Each cn In .OLEObjects
' cn.Select
MsgBox cn.Name & " Index;" & cn.Index
Next cn
End With
End Sub
この回答への補足
説明不足で申し訳ありません・・・
やりたいことはチェックボックスをエクセルの各行に作成
した後、入力処理が行われ、そのあと入力された値によって
True か False かという判定をしたいのです。処理によって
出力される件数が変わる為あらかじめチェックボックスを
設置することができない為、コード内で動的に作成をしております。
With ActiveSheet.CheckBoxes.Add(Range(Cells(j, 2), Cells(j, 4)).Left, Range(Cells(j, 2), Cells(j, 4)).Top, Range(Cells(j, 2), Cells(j, 4)).Width, Range(Cells(j, 2), Cells(j, 4)).Height)
.Name = TempName
.Caption = "キャプション"
End With
>If Worksheets("Sheet1").CheckBox1.Value = True Then
>とすればよいだけです。
上記のようにありましたので、少し変えてみました。エラー自体は
でなくなったのですが、True/Falseの判別をしてくれません。
If ActiveSheet.CheckBoxes(TempName).Value = True Then
True 処理
Else
False 処理
End If
よろしくお願い致します。
No.3
- 回答日時:
ひょっとして、そのCheckBoxを設置したワークシートがアクティブじゃないんじゃないですか?
もしそうなら
If ActiveSheet.OLEObjects(TempName).Object.Value = True Then を
If Sheets("Sheet1").OLEObjects(TempName).Object.Value = True Then のようにシートを明示してください。
そういう問題ではないならば、変数をどう定義したか確認してください。
少なくとも
Dim TempName As String
TempName = "CheckBox1"
と定義して試したら、ちゃんと作動しましたよ。
No.2
- 回答日時:
>エクセル VBA CheckBoxのオブジェクト名に変数を使用して
TempName が何を入れているのか分かりません。オブジェクト名というのは、CheckBox1 とか言うものなら、"CheckBox" & i
たとえば、このようなコードになります。
Sub Test1()
Dim i As Long
With ActiveSheet
For i = 1 To 5 'CheckBoxの数が分かっている場合は、ここに数字を入れる
If .OLEObjects("CheckBox" & i).Object.Value Then
.OLEObjects("CheckBox" & i).Object = False
Else
.OLEObjects("CheckBox" & i).Object = True
End If
Next i
End With
End Sub
'//
'CheckBoxの数が不明な場合
Sub Test2()
Dim cn As Object
With ActiveSheet
For Each cn In .OLEObjects
If TypeOf cn.Object Is MSForms.CheckBox Then
If cn.Object.Value = True Then
cn.Object.Value = False
Else
cn.Object.Value = True
End If
End If
Next cn
End With
End Sub
No.1
- 回答日時:
TempName経由で引いたOLEObjectに .Objectが存在しないのかもしれませんが
他にも原因が考えられるためなんともいえないです。
こういう時はエラーメッセージを丸ごと検索してみると
いいかもしれないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- Visual Basic(VBA) VBAのエラーについて 2 2023/08/02 17:46
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
Excel VBAでCheckboxの名前を変数にとって値を調べたい
Visual Basic(VBA)
-
EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい
Visual Basic(VBA)
-
-
4
Excel2007 でのチェックボックスの名称
Visual Basic(VBA)
-
5
エクセルで、チェックボックスにチェックをいれた行のデータのみを別シートに転記するには
Excel(エクセル)
-
6
ワークシート上のコントロールの操作方法
Visual Basic(VBA)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
9
フォームのCheck boxとOLEObjectのCheckboxのマクロの違い?
PowerPoint(パワーポイント)
-
10
【VBA】シート上の複数のチェックボックスのうちどれか一つでも変更した場合のイベント
Visual Basic(VBA)
-
11
CheckBoxの配列化
Access(アクセス)
-
12
Excel VBA の印刷後の判定
Excel(エクセル)
-
13
エクセルVBAでオプションボタンを無効にする方法
Excel(エクセル)
-
14
VBA(エクセル)のユーザーフォームの固定
Visual Basic(VBA)
-
15
エクセルユーザーフォームのチェックボックスのCaptionにセルの値を入れたい。
Excel(エクセル)
-
16
コマンドボタンがあるかどうかを取得するには?
PowerPoint(パワーポイント)
-
17
オブジェクト名をVBAで指定する方法を教えてくださ
PowerPoint(パワーポイント)
-
18
UserForm1.Showでエラーになります。
工学
-
19
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
20
(VBA)チェックボックスのclickのイベントが、プログラムからの操作でも反応してしまいます。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
漢字の意味で、「町」「街」「...
-
EXCELで、漢字のみ抽出する式を...
-
「~してはる」は敬語?それと...
-
京都のいしちょうは本当に幽霊...
-
「洛西」は「らくせい」ですか...
-
下の古文を訳してほいしいです。
-
私は滋賀県が嫌いです。 絶対に...
-
大阪市は名古屋の何倍くらい都...
-
「のや」「んや」って言う関西弁
-
東日本から西日本へ旅行した場...
-
「上京」の意味
-
修学旅行のお土産は先に注文が...
-
「来来亭」と「魅力屋」の関係は?
-
鈴虫寺で恋愛についての願い方
-
1丁は何メートルになるのでし...
-
京都府相楽郡精華町にあったフ...
-
修学旅行のエピソード
-
京都旅行、車と電車どっちが便...
-
「餃子の王将」の餃子の値段を...
-
奈良で一番の繁華街
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで、漢字のみ抽出する式を...
-
「~してはる」は敬語?それと...
-
漢字の意味で、「町」「街」「...
-
「洛西」は「らくせい」ですか...
-
京都のいしちょうは本当に幽霊...
-
私は滋賀県が嫌いです。 絶対に...
-
1丁は何メートルになるのでし...
-
阪急電車→京都駅への行き方教え...
-
『教えてたもれ』とは、どこの...
-
大阪市は名古屋の何倍くらい都...
-
奈良で一番の繁華街
-
「じゃろ」と最後に付くのはど...
-
東日本から西日本へ旅行した場...
-
「来来亭」と「魅力屋」の関係は?
-
関西弁ネイティブの方!尊敬の...
-
「そうやろ?」って博多弁です...
-
ホテル佐野家
-
友達から わたしのこと嫌い?っ...
-
富山のテレビチャンネル
-
京都旅行、車と電車どっちが便...
おすすめ情報