プロが教えるわが家の防犯対策術!

 初心者です。エクセルのマクロで次のようなコードを書いたとき(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)ではエラーと
なるのかわかりません。詳しい方、ご教示願います。

A 回答 (3件)

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
    • good
    • 0
この回答へのお礼

 シートをオブジェクト型にするか、チェックボックスごとブール型にすればいいんですね。ブール型の方が若干ですが使用メモリが少ないみたいなので、こちらで検討したいと思います。どうもありがとうございました!

お礼日時:2008/03/17 19:09

Sheetsコレクションと Worksheetsコレクションで扱うオブジェクトが違うからです



WorksheetsはWorksheetオブジェクトですよね
Sheetsは Sheet1やSheet2などWorksheetを継承したオブジェクトです
ワークシートに貼り付けたチェックボックスなどは Sheet1オブジェクトのメンバーとして認識されます
しかし Worksheetオブジェクトのメンバーとしては認識されないため
A.CheckBox1といった記述が出来ないのです
    • good
    • 0
この回答へのお礼

 Sheet1オブジェクトのメンバーであってWorksheetオブジェクトのメンバーではない、ということで何となく理解できました。ありがとうございました!

お礼日時:2008/03/18 13:53

今まで質問の現象に出くわしたことがなかったですが


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
    • good
    • 0
この回答へのお礼

 worksheet型ではなくobject型で宣言すればいいみたいです。色々と例を示して頂き、ありがとうございました。

お礼日時:2008/03/18 14:07

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