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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2023/01/20 14:36
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
フォントについて教えてください!
みなさんの一番好きなフォントは何ですか? よく使うフォントやこのフォント好きだなあというものをぜひ教えてください!
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
「黒歴史」教えて下さい
若気のいたりでやってしまったけれど、いまとなっては封印したい… そんなあなたの黒歴史を教えて下さい。
-
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
実行時エラー 438 の解決策をおしえてください。
Visual Basic(VBA)
-
6
VBAでEmpty値って何ですか?
Excel(エクセル)
-
7
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
8
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
11
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
12
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
13
VBA 存在しないシートを選択した時にエラーメッセージを表示するには?
Visual Basic(VBA)
-
14
VBA:小数点以下の数字を取得できる関数は?
Visual Basic(VBA)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
17
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
18
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
19
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
20
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
別のシートから値を取得するとき
-
特定の文字を含むシートだけマ...
-
最終行の指定について教えてく...
-
【ExcelVBA】全シートのセルの...
-
リストボックスの複数データを...
-
ユーザーフォームに入力したデ...
-
シート名の一部を変更する方法...
-
IFステートの中にWithステート...
-
Worksheet_Changeの内容を標準...
-
エクセルのシート名変更で重複...
-
VBAで指定シート以外の選択
-
エクセルのマクロでアクティブ...
-
エクセルVBAでダブルクリックを...
-
vba 環境依存文字がListViewボ...
-
エクセルのマクロについて教え...
-
EXCEL VBAで複数シートから該当...
-
excelで新規作成されるシート名...
-
Excelマクロ Application.Run
-
userFormに貼り付けたLabelを変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
別のシートから値を取得するとき
-
Excelマクロのエラーを解決した...
-
実行時エラー'1004': WorkSheet...
-
ブック名、シート名を他のモジ...
-
ExcelのVBAのマクロで他のシー...
-
VBAで指定シート以外の選択
-
VBA 存在しないシートを選...
-
エクセルのシート名変更で重複...
-
IFステートの中にWithステート...
-
シートが保護されている状態で...
-
【VBA】シート名に特定文字が入...
-
ExcelVBA:複数の特定のグラフ...
-
XL:BeforeDoubleClickが動かない
-
実行時エラー1004「Select メソ...
-
【VBA】色のついたシート名を取得
-
エクセル・マクロ シートの非...
おすすめ情報
まず、目的のシートを探した後、そのシートを表示(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))