コンパイルエラー:メソッドまたはデータメンバが見つかりません

このQ&Aのポイント
  • 初心者の方がエクセルのマクロでコンパイルエラーが発生する問題について質問されています。
  • 質問者は、同じ意味のコードを2つのif文で書いていますが、2番目のif文でエラーが発生する理由がわからないと困っています。
  • 詳しい方からの回答を待っているとのことです。
回答を見る
  • ベストアンサー

コンパイルエラーの対処がわかりません。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Sheetsコレクションと Worksheetsコレクションで扱うオブジェクトが違うからです WorksheetsはWorksheetオブジェクトですよね Sheetsは Sheet1やSheet2などWorksheetを継承したオブジェクトです ワークシートに貼り付けたチェックボックスなどは Sheet1オブジェクトのメンバーとして認識されます しかし Worksheetオブジェクトのメンバーとしては認識されないため A.CheckBox1といった記述が出来ないのです

okranta
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

今まで質問の現象に出くわしたことがなかったですが http://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=6184&page=0 と似た質問ではないでしょうか。 自己流解釈の項が参考になりませんか 下記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

okranta
質問者

お礼

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

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答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

okranta
質問者

お礼

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

関連するQ&A

  • エクセル マクロ チェックボックス

    sheet1にチェックボックスが3つあり、マクロを実行するコマンドボタンが1つあります。 チェックボックスにレ点を入れることにより、sheet4のデータからsheet2にグラフを作成しようと考えてますが、エラーが出てしまい解決できません。 どのように訂正したらいいのか教えて頂けないでしょうか。 Private Sub CommandButton1_Click() Dim GraphRange As String Dim Graph As ChartObject Dim lastRow As Long Set Graph = Sheets("sheet2").ChartObjects.Add(150, 27, 350, 200) lastRow = Sheets("sheet4").Range("A" & Rows.Count).End(xlUp).Row GraphRange = Sheets("sheet4").Range(Cells(1, 1), Cells(lastRow, 1)).Value If Sheets("sheet1").CheckBox1.Value = True Then 'CheckBox1にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 2), Cells(lastRow, 2)).Value End If If Sheets("sheet1").CheckBox2.Value = True Then 'CheckBox2にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 3), Cells(lastRow, 3)).Value End If If CheckBox3.Value = True Then 'CheckBox3にチェックがあれば GraphRange = Sheets("sheet4").Range(Cells(1, 4), Cells(lastRow, 4)).Value End If Graph.Chart.ChartWizard Source:=Sheets("sheet4").Range(GraphRange).Value, _ Gallery:=xlLine, Format:=1, PlotBy:=xlColumns, _ CategoryLabels:=1, SeriesLabels:=1, HasLegend:=True End Sub

  • ワークシート上のチェックボックスのチェックをカウント

    こんにちは EXCELのVBAに関する質問なのですが ワークシート上に配置したチェックボックス(コントロールツールボックス) で各シートのCheckbox1にチェックが入っている数を数えたいのですが 下記のように書いたところエラーが出ました。 何かよい改善案ご存知の方いらっしゃいませんか? よろしくお願いいたします。 Sub test() Dim myst As Worksheet Dim yes As Integer, myct As Integer myct = ThisWorkbook.Sheets.Count Worksheets.Add after:=Sheets(myct) Sheets(myct + 1).Name = "syuukei" For Each myst In Worksheets On Error GoTo elabel If ThisWorkbook.myst.CheckBox1.Value = True Then yes = yes + 1 End If elabel: Next with worksheets("syuukei") .range("a2")="YESの合計" .range("b2")=yes end with End Sub

  • イベントマクロで「コンパイルエラー 因数は省略できません」

    マクロ初心者です イベントマクロを作りました Sheet2の結合されたB44:E44のセルに入力すると自動的にマクロが働いて Sheet1のW1の値のみがSheet2の結合されたB44:E44のセルに貼り付けられるマクロなのですが 実行すると「コンパイルエラー 因数は省略できません」と表示されます マクロ自体は正しく動いているのですがどういうことなんでしょう Sheet2 Worksheet Change Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub Application.EnableEvents = False Sheets(1).Select Range("W1").Copy Sheets(2).Select Range("B44:E44").Select ActiveSheet.Paste Application.CutCopyMode = False Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range)…この行が黄色になります If Intersect(Target.Range("B44:E44")) Is Nothing Then Exit Sub…intersectのところが青くなります こんな説明でわかってもらえるでしょうか?

  • エクセルのマクロで繰り返し処理

    当方マクロ初心者ですが下記のマクロをCheckBox0~CheckBox23についてコピーするセルを変化させながら繰り返し処理を行いたいのですが、簡単なループ処理で行えますか? 教えていただければ幸いです。 If CheckBox0.Value = True Then Worksheets("sheets1").Activate  行 = Worksheets("sheets1").Range("e7")   行 = 行   Worksheets("sheets1").Range("g7:t7").Copy Windows("Books1.xls").Activate Sheets("sheets1").Select Range(Cells(行, 15), Cells(行, 15)).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If

  • エクセルVBA 最終行にデータを追加する

    エクセルのユーザーフォームにチェックリストを用意しました CheckBox1~CheckBox5まであり、 CheckBox1をクリック(true)にすると、セルに“あ” CheckBox2をクリック(true)にすると、セルに“い” CheckBox3をクリック(true)にすると、セルに“う” CheckBox4をクリック(true)にすると、セルに“え” CheckBox5をクリック(true)にすると、セルに“お” を反映させようと思っています たとえば、 ・CheckBox1のみクリック(true)で、A1に“あ” ・CheckBox2のみクリック(true)で、A1に“い” ・CheckBox1、CheckBox3をクリック(true)で、A1に“あ”、A2に“う” ・CheckBox2~CheckBox5をクリック(true)で、A1に“い“、A2に“う“、A3に”え”、A4に“お” といった感じで、選んだチェック項目について、A列においてA1から次々とデータを入力しようとしています そこで、 sheets1.Range("A:A").Clear If CheckBox1.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "あ" End If If CheckBox2.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "い" End If If CheckBox3.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "う" End If If CheckBox4.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "え" End If If CheckBox5.Value = True Then sheets1.Cells(Rows.Count, 1).End(xlUp) = "お" End If としました (実際は、CheckBoxの名前が1~5と数字ではないので、forは使いませんでした) すると、 CheckBox1~CheckBox5を全てクリック(true)しても、A1に“お”が反映されるだけで“あ”~”え”が入力されません どうすれば、思い通りになるのでしょうか 初歩的な質問だと思うのですが、よろしくお願いします

  • エクセル チェックボックスの解除について(VBA)

    YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。 ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。 Private Sub CheckBox1_Click() If CheckBox1 = True Then Sheets("sheet1").Range("A1") = 1 Sheets("sheet1").Range("A2") = 0 CheckBox2 = False・・・ア Else Sheets("sheet1").Range("A1") = "" End If End Sub Private Sub CheckBox2_Click() If CheckBox2 = True Then Sheets("sheet1").Range("A1") = 0 Sheets("sheet1").Range("A2") = 1 CheckBox1 = False Else Sheets("sheet1").Range("A2") = ""・・・イ End If End Sub

  • シートの条件選択

    EXCEL2003で下記のようにユーザーフォーム上のオプションボタンと チェックボックスの選択状況に応じてシートを選択するようにしていました が、EXCEL2007で実行したら、「sel_sw」のところで 「コンパイルエラー:プロジェクトおよびライブラリが見つかりません」 とエラーが出てしまいました。 EXCEL2007ではどのように記述すればよいか、教えていただけますでしょうか。 よろしくお願いします。 --------------------------------------------------------------- Private Sub 印刷する_Click() UserForm9.Hide With UserForm9 If .OptionButton1 = False And .OptionButton2 = False Then MsgBox ("オプションボタン選択") GoTo error End If If .CheckBox2 = False And .CheckBox3 = False And .CheckBox4 = False And .CheckBox5 = False Then MsgBox ("チェックボックスを選択") GoTo error Else sel_sw = True If .CheckBox2 = True And .OptionButton1 = True Then Sheets("A").Select sel_sw sel_sw = False End If If .CheckBox2 = True And .OptionButton2 = True Then Sheets("B").Select sel_sw sel_sw = False End If If .CheckBox3 = True And .OptionButton1 = True Then Sheets("C").Select sel_sw sel_sw = False End If If .CheckBox3 = True And .OptionButton2 = True Then Sheets("D").Select sel_sw sel_sw = False End If If .CheckBox4 = True Then Sheets("E").Select sel_sw sel_sw = False End If If .CheckBox5 = True Then Sheets("F").Select sel_sw sel_sw = False End If End If End With Exit Sub error: UserForm9.Show End Sub

  • エクセルマクロのCallとコンパイルエラー

    エクセルマクロのCallとコンパイルエラー よく、教えていただくのですが作ったマクロを呼び出すのに、 ・Call 作成したマクロ とか教えてもらいますが 標準モジュールのツリーには ・Module1 ・Module2 ・オートオープン ・リセット とかがあって ・Call リセット とかにして実行すると ・コンパイルエラー (モジュールではなく、変数またはプロシージャを指定してください) となってしまいます。 Callの後にはどういう風にすればいいのでしょうか? -------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$5" And Len(Range("B5").Value) > 1 Then Call 印刷←印刷はModule2です。 End If End Sub ------------- で印刷のマクロの一部に Call リセット をつけたたしたらなりました。 よろしくお願いします。

  • マクロエラー処理

    下記のマクロを実行すると、If (.Range のところでコンパイルエラー参照が不正または不完全です。というメッセージが出るのですが、どこを修正すればよいのでしょうか 教えてください。 Sub 再表示1() Dim SheetName As String Dim i As Integer Dim LastRow As Integer Dim rng As Range LastRow = 3000 '最終行の番号 Sheets("ACT").Select For i = 6 To LastRow If (.Range("D" & i) = "A310" Or .Range("D" & i) = "A505") And .Range("V" & i) < 0 Then .Cells(i, "W").Resize(1, 3).ClearContents End If Next Stop End With End Sub

  • ユーザーフォームのデータ

    ユーザーファームを2つ作成しました。 そのユーザーフォームのデータを表の最終行に追加をしたいのです。 Range("A65536").End(xlUp).Offset(1,0).select を使おうと思っていますが、うまくいきません。 どなたか教えてください。 <ユーザーフォーム1> Private Sub CommandButton1_Click() Sheet2.Range("H7") = TextBox1 Sheet2.Range("I7") = TextBox2 Sheet2.Range("J7") = TextBox3 Sheet2.Range("K7") = TextBox4 Sheet2.Range("L7") = TextBox5 Sheet2.Range("P7") = TextBox6 If CheckBox1.Value = True Then Worksheets(2).Range("M7") = "0:30" Else Worksheets(2).Range("M7") = "0:00" End If If CheckBox2.Value = True Then Worksheets(2).Range("R7") = "1000" Else Worksheets(2).Range("R7") = "0" End If If CheckBox3.Value = True Then Worksheets(2).Range("S7") = "3000" Else Worksheets(2).Range("S7") = "0" End If If CheckBox4.Value = True Then Worksheets(2).Range("T7") = "1500" Else Worksheets(2).Range("T7") = "0" End If Unload Me End Sub <ユーザーフォーム2> Private Sub CommandButton1_Click() Sheet2.Range("V7") = TextBox1 Sheet2.Range("W7") = TextBox2 Sheet2.Range("X7") = TextBox3 Unload Me End Sub

専門家に質問してみよう