
Worksheets(myWS.Name).Active のところで、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
というエラーになる理由がわからなくて困っています。
存在するシート名を、変数myWSに順番に入れながら、探しているシート名と一致することを検査し、
なかったら Exit Subで終了
シートがあれば次の処理に進もうと思っています。
次の処理は、見つかったシート内で目的のセルを探したいため、
まずはActive化が必要と思って、
Worksheets(myWS.Name).Active としました。
(Sheets(myWS.Name).Select とするとダメだったからです)
最初から、目的のシートを表示している状態で上記マクロを実行すると、
ちゃんとシート名を検知したうえで、そのシート内のセル探しの処理までしてくれるのですが、
別のシートを表示した状態で、上記マクロを実行すると、シート名を検知し、シートが移動しただけで
次の処理を実行してくれません。
見つけたシートが表示されたところで終わってしまい、
そのまま再度同じマクロを実行するとやっと次の処理に進んでくれるという具合です・・・
更に
Worksheets(myWS.Name).Active
Sheets(myWS.Name).Select の違いが解ってません。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
#1です
多分、私が書いた https://oshiete.goo.ne.jp/qa/12655633.html コードの改造なので、あたりを付けて回答しますが
Set target = .UsedRange.Find(What:="■明細", LookAt:=xlWhole)
If target Is Nothing Then Exit Sub
の実行は先に記載されている With ActiveSheetシートが対象です。
なので
MsgBox myWS.Name
Sheets(myWS.Name).Select
をWith ActiveSheetの上に書いてください。
又は、対象シートをmyWSシートにしたい場合は、簡単な方法として
myWS.UsedRange.Find の様に書くと対象になります。
ありがとうございます。
仰る通りです。
そこそこ長い処理(自分にとっては)を地道に構築しており、
部分部分でつまづきながら質問させて頂いてます。
「With ActiveSheetの上に」というのは自己解決できなかったと思います・・・
おかげさまでエラーが出なくなりました!
理由を解説していただけると勉強になります。
No.6
- 回答日時:
こんばんは #5です。
精通した方から見るとこんな事を書いたら叱られるかもしれませんが、
なんとなくでもつかめたなら良かったです。
より深く探求される場合は、set オブジェクト変数 = オブジェクト
のような書き方と読解性や処理速度など比べると良いかも知れませんね
QAサイトの場合、説明のし易さや改造時明示的に分かるので
Set の方が多いかも知れませんね。
1つだけ、気になる点がありますので、一応コメントさせて頂きます。
>結局「Sheets(2).Activate」が無視されてるんだなと感じました。
表現による私の受け取り方の誤解とは思いますが、VBAでも他の言語でも
プログラムコードは命令語なので無視をする事はありません。(当たり前ですけれど結構大事)
例の場合、単に同じシートを選択した結果、実行されなかったの如く見えるのです。 まぁ、すでに選択されていますみたいなエラーが出ても良さそうですがね・・・
回答べたで上から見たいな表現をしてしまうかも知れませんが、
出来るだけローカルでデバッグして回答するようにしています。
(私の回答はデバッグしないといけないレベルなので)
結果や疑問点は補足を頂くと私もスッキリしますね。
長い処理を構築されているとの事で頑張ってください。
ありがとうございます。
本当に有り難い限りです。
>>結局「Sheets(2).Activate」が無視されてるんだなと感じました。
>
>表現による私の受け取り方の誤解とは思いますが、VBAでも他の言語でも
>プログラムコードは命令語なので無視をする事はありません。
私の表現が拙くてすみません。
無視する事はないのは承知です。本当に無視するのは、注釈行だけです。
あっても無くても影響がなく、あまり意味のない記述だなぁという事を言いたかっただけです。
ほぼ完成したと思ったら詰めの部分でまたつまづいてしまいました(涙)
新しく挙げさせていただきます。
No.5
- 回答日時:
こんにちは
>理由を解説していただけると勉強になります。
独学の範疇でしっかり習った訳でないので(なんとなく理解している程度)役に立つかはわかりませんが、
常識的なところから、プログラムコードは、条件分岐やgotoなどがない限り上から下に処理をされて行きます。
ActiveSheetは その行が実行された時 のシートオブジェクトが返ります
実験してみましょう。
sheets(1)がアクティブな(表示された)状態でステップ実行で確認してみてください。
sub test()
With ActiveSheet 'sheets(1)
.cells(1,1).value=1 'sheets(1)のA1セルに1が入力される
sheets(2).activate
.cells(1,2).value=2 'sheets(1)のB1セルに2が入力される
end With
end sub
sheets(2)はシートが選択されますが、
セルは元の選択セル、入力はありません。(実行されません)
.select で実験しないのは、sheets(2).activateでシートが変わる為
.cells(1,2).select を実行すると1004エラーが返るはずなので混乱しない為
(アクティブでないシートのセルを選択できない為)
つまり、With ActiveSheet で指定したオブジェクトがEnd Withまで
.の前にオブジェクトなどが省略された形になります。
つたない説明なのでわかりますかね。。
ありがとうございます!
実験してみました。
初めは「Sheets(2).Activate」でエラーが出ました。
新規で開いたブックがSheet1しかなかったので当然ですね。
(+)でSheet2を作ってから、再度実行してみました。
Sheet2が表示されたけどB1に「2」は入りませんでしたが、
Sheet1に1と2が入ってました。
なるほど、どのシートに対しての処理か固定してるんだなとぼんやりの理解程度です。
でもこのルールがどうして必要なのか、どんな時に必要になるのかは、経験が少ないためまだ分かりません。これから徐々にですね。
余談ですが、
このマクロを、Sheet2を表示した状態で実行すると、
Sheet2内に1と2が入りました。
結局「Sheets(2).Activate」が無視されてるんだなと感じました。
No.2
- 回答日時:
こんにちは
通常、存在しないシートを指定したような場合は「インデックスが有効範囲にありません」というエラーになります。
ですので、ご提示のエラーメッセージからすると、myWS.Nameでエラーが発生しているのではないかと推測します。
>存在するシート名を、変数myWSに順番に入れながら~
とありますが、myWSはどのような型宣言で、実際には何が入っているのでしょうか?
myWS.Name という記述からすれば、Worksheetオブジェクトのようにも見えますが、それならわざわざ
>Worksheets(myWS.Name)
などという、まわりくどい記述をする必要はないはずです。
想像するところ、その行の前に
MsgBox myWS.Name
などと入れてみても、エラーになるのではないでしょうか?
もしそうなら、シート名にはなっていないということで、もっと別のところに原因はあると考えられます。
これ以上は、変数 myWS が一体どうなっているのかがご質問文の情報からではわからないので、はっきりとはしません。
ありがとうございます。
また、伝わりにくくて申し訳ありません。
複数のシートの中から探したいシートが「目的シート」だとします。
MsgBox myWS.Name
と入れてみたところ「目的シート」と表示されました。
その次の行は
Sheets(myWS.Name).Select
です。
確かにそのシートが表示されますが、続く処理がされずに終了してしまうのです。
分かりにくいですよね。補足に続きのソースを書きます。
No.1
- 回答日時:
こんばんは
>「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
表示の通り、.Activeはサポートしていない為です。
アクティブシートにする場合は、Worksheet.Activate メソッドを使います
https://docs.microsoft.com/ja-jp/office/vba/api/ …
>Worksheets(myWS.Name).Active
Sheets(myWS.Name).Select の違いが解ってません。
Selectは選択であって必ずActiveにする訳では無いと思います。
自動記録で複数シートを選択するコードで分かるかな?
Sub Macro1()
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Sheets("Sheet1").Activate
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
マクロの「Rangeメソッドは失敗しました’Globalオブジェクト」エラーの解決方法について
Excel(エクセル)
-
-
4
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
5
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
6
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
9
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
10
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
11
ExcelVBAで質問です。Workbook_openイベントが発生し
その他(Microsoft Office)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
14
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
15
実行時エラー1004「Select メソッドが失敗しました。」エラーの回避方法
Visual Basic(VBA)
-
16
エクセルでセルの中身が漢字かどうか識別する方法は?
Excel(エクセル)
-
17
エクセルで別ブックをバックグラウンドでオープンする方法
Excel(エクセル)
-
18
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
19
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
20
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
ブック名、シート名を他のモジ...
-
エクセルVBA Ifでシート名が合...
-
ユーザーフォームに入力したデ...
-
VBA 検索して一致したセル...
-
エクセルで特定のシートのみ自...
-
Excel チェックボックスにチェ...
-
【ExcelVBA】全シートのセルの...
-
エクセルのマクロでアクティブ...
-
【VBA】指定した検索条件に一致...
-
Excel VBA で自然対数の関数Ln...
-
実行時エラー1004「Select メソ...
-
Excelマクロのエラーを解決した...
-
実行時エラー'1004': WorkSheet...
-
シートが保護されている状態で...
-
VBAマクロでシートコピーした新...
-
EXCEL(VBA)でシート保護がかか...
-
Worksheet_Changeの内容を標準...
-
VBA 存在しないシートを選...
-
特定の文字を含むシートだけマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報
まず、目的のシートを探した後、そのシートを表示(Active?選択?)させ、
目的シート中から、「■明細」というセルを探してセル番地を表示させるマクロです。
次のソースです。
最初から目的シートがActiveな状態で実行すればセル検索まで進みます。
わざと別シートをActiveにして実行すると、目的シートを表示して終了してしまいます。
※ここに書きながら思ったのですが、Exit Subに行っちゃってるのでしょうか?
ソース:
MsgBox myWS.Name
Sheets(myWS.Name).Select
Set target = .UsedRange.Find(What:="■明細", LookAt:=xlWhole)
If target Is Nothing Then Exit Sub '見つからなければ、終了
Set r1 = target.Offset(1)
Range(r1.Address(0, 0)).Select
MsgBox "開始セル(" & target & " の1つ下)は " & (r1.Address(0, 0))