
初心者です。エクセルのマクロで次のようなコードを書いたとき(2)のif文のところで
「コンパイルエラー:メソッドまたはデータメンバが見つかりません」
と表示されます。
Dim A As Worksheet
Set A = Worksheets(1)
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If A.CheckBox1 = True Then '(2)
Range("B1") = 1
End If
どちらも同じ意味だと思っているのですが、なぜ(2)ではエラーと
なるのかわかりません。詳しい方、ご教示願います。
No.2ベストアンサー
- 回答日時:
Sheetsコレクションと Worksheetsコレクションで扱うオブジェクトが違うからです
WorksheetsはWorksheetオブジェクトですよね
Sheetsは Sheet1やSheet2などWorksheetを継承したオブジェクトです
ワークシートに貼り付けたチェックボックスなどは Sheet1オブジェクトのメンバーとして認識されます
しかし Worksheetオブジェクトのメンバーとしては認識されないため
A.CheckBox1といった記述が出来ないのです
Sheet1オブジェクトのメンバーであってWorksheetオブジェクトのメンバーではない、ということで何となく理解できました。ありがとうございました!
No.3
- 回答日時:
今まで質問の現象に出くわしたことがなかったですが
http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi? …
と似た質問ではないでしょうか。
自己流解釈の項が参考になりませんか
下記Test07()がその不思議さを再現したように思いました。
ーー
以下は私がテストでやってみたものです。参考に
Sub test01()
Dim A As Worksheet
Set A = Worksheets(1)
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If Worksheets(1).CheckBox1 = True Then '(2)
Range("B1") = 1
End If
End Sub
Sub test02()
Dim wA As Worksheet
Set wA = Worksheets("Sheet1")
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If Worksheets("Sheet1").CheckBox1 = True Then '(2)
Range("B1") = 1
End If
End Sub
Sub test03()
Dim wA As Object
Set wA = Worksheets("Sheet1")
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If CheckBox1 = True Then '(2)
Range("B1") = 1
End If
End Sub
Sub test04()
Dim wA As Object
Set wA = Worksheets("Sheet1")
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If wA.CheckBox1 = True Then '(2)
Range("B1") = 1
End If
End Sub
Sub test05()
Dim wA As Object
Set wA = Worksheets("Sheet1")
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If wA.Range("A1") = 1 Then '(2)
Range("B1") = 1
End If
End Sub
Sub test06()
Dim wA As Object
Set wA = Worksheets("Sheet1")
MsgBox wA.Name
End Sub
Sub test07()
Dim A As Worksheet
Set A = Worksheets(1)
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
A.Activate
If ActiveSheet.CheckBox1 = True Then '(2)
Range("B1") = 1
End If
End Sub
No.1
- 回答日時:
Sub 回答_1()
Dim A As Object
Set A = Sheets(1)
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If A.CheckBox1 = True Then '(2)
Range("B1") = 1
End If
End Sub
Sub 回答_2()
Dim A As Boolean
A = Sheets(1).CheckBox1
If Sheets(1).CheckBox1 = True Then '(1)
Range("A1") = 1
End If
If A = True Then '(2)
Range("B1") = 1
End If
End Sub
シートをオブジェクト型にするか、チェックボックスごとブール型にすればいいんですね。ブール型の方が若干ですが使用メモリが少ないみたいなので、こちらで検討したいと思います。どうもありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
エクセルマクロエラー「'Cells'...
-
「Columns("A:C")」の列文字を...
-
EXCEL VBA オートシェイプナン...
-
VB6 ファイルのリネームの仕方
-
VBScriptからDLL参照設定したい
-
エクセルのVBAの標準モジュール...
-
VBA msoShapeBlockArcで扇形の...
-
エクセルVBAで配列内に空白デー...
-
アクセスにてオブジェクト名変...
-
Word2007数式でIMEオン/オフを...
-
VBAによるコメントの余白設定
-
ある文字列が全て数字であるか...
-
VBAからPDFファイルにパスワー...
-
VBからExcelのセルの書式設定を...
-
CreateObjectとGetObjectの違い
-
VBAで作成するメール(開封確認...
-
AccessVBAで「dim dbs as datab...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
PowerPointVBAでスライドマスタ...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
テキストボックス中の文字列の...
-
VBAからPDFファイルにパスワー...
-
VBAで既に開いている別アプリケ...
-
Excel VBAでIEにアクセスするプ...
-
オブジェクトが見つかりません
-
ExcelVBAでのNZ関数について
-
エクセルVBAでcode128のバー...
-
WordにOLEで埋め込んだExcelでW...
-
AccessVBAで「dim dbs as datab...
-
エクセルマクロエラー「'Cells'...
-
エクセル エラー438
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBScriptでファイルの日時順(降...
おすすめ情報