処理の度にシート数が変わるブックで同じマクロを繰り返したいのですが、すべてのシートを選択してマクロを実行したところマクロに範囲指定→ソートの部分があり、処理が止まってしまいます。そこでDo~Loopを使用して順番にマクロを処理していこうと思うのですが、マクロを止める構文がよく解りません。
VBA初心者なものでいろいろ調べて以下のようなものを考えてみたのですがエラーになってしまいます。どなたかお助けください。
Do Until ActiveSheet.Previous.Is Nothing
Application.Run "PERSONAL.XLS!Macro101"
ActiveSheet.Previous.Activate
Loop
End Sub
No.1ベストアンサー
- 回答日時:
Dim ws As Worksheet
For Each ws in Worksheets
Application.Run "PERSONAL.XLS!Macro101"
ws.Previous.Activate
Next
違うかな?
この回答への補足
ご回答誠にありがとうございました。上記の記述で走らせたところ
ws.Previous.Activateのところで止まってしまうので下記の様に変更したところうまくはしりました。かなり感動しました。(^_^)
Dim ws As Worksheet
For Each ws In Worksheets
Application.Run "PERSONAL.XLS!Macro101"
ws.Next.Activate
Next
ついでと言っては何なのですが、最後まで処理が走ったところで
「実行時エラー”91”
オブジェクト変数またはWithブロック変数が設定されてません」と表示されます。このエラーを発生させないためにはどのように記述を修正したらよいのでしょうか。大変恐縮ですがよろしくご指導お願いいたします。
No.2
- 回答日時:
こんにちは。
質問のコードは、コード全体をみないと手が付けられないと思います。
>Application.Run "PERSONAL.XLS!Macro101"
いちいち、ループして、別のブックのマクロオブジェクトを呼び出しているわけですね。
参照設定されているなら分かるけれども、「PERSONAL.XLS」 のマクロをRunで呼び出すのは、ちょっと考えられません。通常、PEROSNAL.XLS にあるマクロは、特殊なものを除けば、単独で使うものがほとんどです。そのDo--While のループのマクロの本体はどこにあるのでしょうか?
そのモジュールに、別途、コードを書けばよいのではありませんか。
もし、それが、マクロ・モジュールとして使うなら、最初から、アドインにするか、そのマクロ全体を、「PEROSNAL.XLS」に入れればよいと思います。Run で呼び出しても、結局、呼び出しの対象は、オブジェクトになっているので、ループでは、タイミングが悪いです。
本来、Run で呼び出すマクロは、一般ユーザーが手を加えていけないようなものに対して行いますから、恣意的に、Run を使うわけではありません。
>処理の度にシート数が変わるブックで同じマクロを繰り返したいのですが、
という意味が、マクロからは分かりません。
ActiveSheet.Previous Is Nothing (.コンマは取りました)
という意味は、シートのIndex が、「1」 という意味です。
つまり、
ActiveSheet.Previous.Activate
というのなら、シートの最後から遡っていけば、成立するという意味だと思います。
コードで明示的に書くと、
For i = ActiveWorkbook.ActiveSheet.Index To 1 Step -1
ということです。実際、これは、ActiveWorkbook のシートの全部をループするマクロではありません。
通常は、
For Each ws In ActiveWorkbook.Worksheets で、全部のシートをループします。Next もPrevious でも必要はありません。ws に自動的に、格納されています。
>マクロに範囲指定→ソートの部分があり、処理が止まってしまいます。
というのは、もともと、該当する部分にデータがないのか、全体にデータがないのかどちらかだと思います。
例えば、
If ActiveSheet.UsedRange.Cells.Count =1 Then
なら、シートのデータは、1つか、何もないか、どちらかという意味ですし、
WorksheetFunction.Count(ActiveSheet.Cells)
なら、何にもないかどうかはチェックできます。
それから、
>For Each ws In Worksheets
>Application.Run "PERSONAL.XLS!Macro101"
>ws.Next.Activate
>Next
このマクロの意味が分からないです。「"PERSONAL.XLS!Macro101"」の内容が分からないから何もはっきりしたことはいえないけれども、そのまま読めば、シートを一つ置きにという意味になるし、ワークシートが最後(wsに格納される)に来たとき、論理的にActivate しますから、エラーが出ます。
アドバイスありがとうございます。今年から始まった特定健診の電子データ化でデータを受け取る側の仕事をしており、データがCSVではなくXMLで送られてくることがオールジャパンで決められており、急遽XMLとVBAの勉強が課せられてアップアップの日々です。XMLをVBAで加工しているのですが、健診1件につきXMLファイルが1個となるため健診機関から報告の度にシート数が違ってしまうのです。
ご指摘の通り細かいマクロを束ねて一つのマクロにしています。内容を整理してひとつのマクロにして再度チャレンジしてみます。
今回はありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ローマ字→カタカナへ変換(エク...
-
マクロ 実行ボタンを押さずに...
-
Excelを開いた時に表示さ...
-
ワードからエクセルへ貼り付け...
-
EXCELのセルへ、デジタル時計を...
-
複数ファイルにある特定のシー...
-
エクセル グラフの軸の最小値最...
-
エラーになってないのにVBA...
-
EXCEL 複数のシートの同一の位...
-
モジュール内のマクロを全て実...
-
Excelの改ページ 同シート内で...
-
EXCEL2000 VBA マクロ実行中に...
-
マクロ ブックをマクロなしでコ...
-
Excel VBA のdebug(F8キー) が...
-
ワードマクロで画像を選択する方法
-
エクセルのマクロ機能で前のシ...
-
選択範囲の反転
-
Excelでマクロを実行する度に指...
-
Excelマクロからのデータアクセ...
-
TeraTermのマクロについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローマ字→カタカナへ変換(エク...
-
マクロ 実行ボタンを押さずに...
-
Excel VBA のdebug(F8キー) が...
-
EXCELのセルへ、デジタル時計を...
-
Excelを開いた時に表示さ...
-
エラーになってないのにVBA...
-
ワードからエクセルへ貼り付け...
-
複数ファイルにある特定のシー...
-
エクセル グラフの軸の最小値最...
-
Wordの画面を左右にスクロール...
-
エクセルのマクロ機能で前のシ...
-
Wordで「原稿用紙○枚」を換算す...
-
モジュール内のマクロを全て実...
-
エクセルで複数のシートをまと...
-
EXCEL 複数のシートの同一の位...
-
Excelの改ページ 同シート内で...
-
Excelマクロでオプションボタン...
-
【Excel VBA】エラー番号400
-
パワーポイントで、スライドご...
-
マクロ ブックをマクロなしでコ...
おすすめ情報