VBAのシート選択でメソッド一覧が表示されない理由は?

このQ&Aのポイント
  • VBAのシート選択時にメソッド一覧が表示されない理由を調査しました。
  • VBAのコードでSheetsメソッドを使用してシートを選択する際、メソッド一覧が表示されない問題について解説します。
  • VBAのコードでSheetsメソッドに続けて.を入力した際、メソッド一覧が表示されない原因と解決方法についてまとめました。
回答を見る
  • ベストアンサー

「ctrl+J」でヒントが出る場合と出ない場合が

VBA画面で Sub sample() End Sub の中に、 「sh」を入力して、「ctrl+J」を押すと、画像のように、ヒント(候補)がされます。 そして候補の中から「Sheets」を選択し、タブキーを押して「.」を打つと、 メソッドなどの一覧が出てきます。 しかし、 Sub sample() Sheets ("シート1") End Sub の状態で、「Sheets ("シート1")」の後に、「.」を入れると、 画像のようなメソッドなどの一覧が出てこないのですが、なぜでしょうか? Sub sample() Sheets("シート1").Select End Sub としたい場合は、 「Sheets("シート1")」の後に、手動で「.Select」を打たなければいけません。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

参考: http://support.microsoft.com/kb/188389/en-us 親オブジェクトピリオドの続きに自動メンバ表示が機能しないのは、次のようなケースです。 1.親オブジェクトの「オブジェクトの種類」を1つに特定できない場合  たとえば親オブジェクトとして「Sheets("Sheet1")」と書いても、「ワークシート」の可能性と「グラフシート」である可能性があり、この一文だけではそのどちらなのか特定できません。 2.親オブジェクトのクラスが複数のオブジェクトの種類を表現し得る場合  親オブジェクトとして例えば「Worksheets(Index)」は、Worksheetオブジェクトと、Worksheetsコレクションオブジェクトの2通りの使い方ができるので、自動メンバ表示は作動しないようになっています 3.親オブジェクトがバリアント型の場合  たとえば  dim s as worksheet  set s = worksheets("Sheet1")  s. まで書いてCtrl+J  した場合、変数sはワークシートオブジェクトとして特定されているため、自動メンバ表示されます。  たとえば  dim o as variant  set o = worksheets("Sheet1")  o. まで書いてCtrl+J  しても、変数oはバリアント型のため、自動メンバ表示されません。

fsduri132
質問者

お礼

「自動メンバの表示」と言うのですね。 「ワークシート」の可能性と「グラフシート」である可能性があり、この一文だけではそのどちらなのか特定できないからなのですね。納得です。 バリアント型は自動メンバは表示されないのですか。覚えます。 ありがとうございました。大変参考になりました。

関連するQ&A

  • エクセル「マクロの記録」を少し直したい

    マクロの記録で作った下記を Sub Macro1() Sheets("Sheet1").Select Rows("6:6").Select Selection.Copy Sheets("Sheet2").Select Rows("2:2").Select ActiveSheet.Paste End Sub 以下のように書き換えたら、2行目(Paste)がエラーになりました。 Sub ts1() Sheets("Sheet1").Rows("6:6").Copy Sheets("Sheet2").Rows("2:2").Paste End Sub セレクトしないで行ないたいのです。 どう直せばいいでしょうか?

  • エクセルVBAについて

    Sub a() Sheets("Sheet1").Select End Sub Sub b() Worksheets("Sheet1").Select End Sub どちらコードもSheet1を選択しますが 「こちらを使うべき!」ってありますか? 独学のため、SheetsとWorksheetsの違いがわかりません。 ご教授よろしくお願いします。

  • マクロでシートを探し出す場合

    Sub SheetsSelect() Sheets("***").Select End Sub で、最初できてました。 ***には漢字が入ってました。 が、2つ目を作成するとできなくなりました。 日本語でシートを検索する場合、どうすればよいですか?

  • エクセル 複数シート検索のマクロ

    マクロ初心者です。 エクセルの文字列検索で、複数シートにまたがった場合のマクロ記述を知りたいです。 シートaとシートbの選択は下記となると思いますが、 Sub Macro1() Sheets(Array("a", "b")).Select Sheets("a").Activate End Sub その後で、検索窓([ctrl]+[f])を表示させたいのですが・・・。 よろしくご教示願います。

  • エクセルのマクロについて

    エクセル97でマクロを組んで下記作業を行いたいと考えていますが(実際にやりたい事から抜粋した内容です)、不具合が起こっています。 ~やりたい事~ コマンドボタンを押すとあるシートのセルをコピーして、違うシートに貼り付ける。 ~不具合内容~ (1)普通にマクロを実行すると問題ないが、(2)コマンドボタンを使用するとエラーが起こる。 エラー内容は、 「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」 と言う内容です。 ~(1)のVB表記~ Sub Macro1() Sheets("sheet1").Select Range("A1").Select Selection.Copy Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~(2)のVB表記~ Private Sub CommandButton1_Click() Sheets("sheet1").Select Range("A1").Select (←ここでエラーが発生します) Selection.Copy  Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~質問事項~ 1)(2)の表記の何が原因でエラーが起こっているのでしょうか? 2)エラーが起きない為にはどのようにしたら良いでしょうか?

  • SelectとActivateの違いは?

    Sub Macro1() Sheets("Sheet1").Activate Sheets("Sheet2").Select End Sub は、同じ動きをします。 マクロの記録でシートを選択すると、Selectの方が取得されます。 SelectとActivateの違いを説明できる方お願いします。

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセル マクロ コマンドボタンで行をコピーエラー

    教えてください。 sheet2にコマンドボタンを作成し、コードを下記の通りに入力しました。 ボタンを押すと「RangeクラスのSelectメソッドが失敗しました。」とエラー表示され デバックを見るとRows("1:1").Selectが原因みたいですが、どのように手直ししたら いいか教えて頂けないでしょうか。 Private Sub CommandButton1_Click() Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("Sheet2").Select Rows("20:20").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

  • VBAでシートのコピー

    お世話になっております。 VBAの未熟者ですが、個人の資料作成のためのシステムをコツコツと作っております。 今までマクロでシートのコピーをやっていたのですが、コマンドボタンでできるように変更しようとしてうまくいきません。 ファイルAの中にある幾つかのシートの内、シート「個人事業」を「請求書」ファイルの「Sheet2」にコピーしたいのです。その後名前を変更しています。 マクロのプログラムをそのままコピーしてみたのですが、[sheets("個人事業").paste]のところでエラーが出ます。 マクロとコマンドボタンではやはり設定を変更しないといけないのでしょうか?ご教授お願いします。 Private Sub CommandButton1_Click() Sheets("Sheet2").Select Windows("未請求リスト.XLS").Activate Sheets("個人事業").Select Selection.Copy Windows("請求書.xls").Activate Sheets("Sheet2").Select Sheets("個人事業").Paste Sheets("Sheet2").Name = "個人事業請求一覧" Sheets("請求書").Select End Sub 宜しくお願いします。

  • VBAのWorkbook_BeforeSaveイベントについての疑問

    エクセル2000です。 前にも似たような質問をしたのですが理解ができていません。 ThisWorkbookモジュールに以下の記述をし、終了時保存する場合にはSheet2を表に出すようにしました。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Sheets("Sheet1").Range("A65536").End(xlUp).Offset(1).Value = Time() Sheets("Sheet2").Select MsgBox "保存します。" & ActiveSheet.Name Sheets("Sheet1").Range("B65536").End(xlUp).Offset(1).Value = Time() End Sub これで×を押して手動で終了すればそのとおりに働きます。ActiveSheet.Nameも当然Sheet2になります。 ところが、標準モジュールの下記の終了マクロ Sub 終了() ThisWorkbook.Close End Sub で終了しようとすると、A列セルにTime()は記録され、どういうわけかSheet2がSelectされず、MsgBox "保存します。" のメッセージが出て、B列セルにTime()が記録され、保存されます。 ActiveSheet.NameもSheet2ではありません。 つまり、Sheets("Sheet2").Select の部分だけが完全にスキップされてしまうのです。 どうしてでしょうか?

専門家に質問してみよう