
処理の度にシート数が変わるブックで同じマクロを繰り返したいのですが、すべてのシートを選択してマクロを実行したところマクロに範囲指定→ソートの部分があり、処理が止まってしまいます。そこで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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 【VBA】複数ブックから特定のシートを抽出して一つのブックに集約するマクロについて 3 2022/09/04 15:05
- Visual Basic(VBA) VBAマクロ 決まっていない行を選択して別シートへ貼付け 4 2023/02/16 16:08
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ローマ字→カタカナへ変換(エク...
-
エラーになってないのにVBA...
-
マクロ 実行ボタンを押さずに...
-
選択範囲の反転
-
Wordの画面を左右にスクロール...
-
エクセルで複数のシートをまと...
-
エクセル グラフの軸の最小値最...
-
Excelマクロでオプションボタン...
-
Excelを開いた時に表示さ...
-
Excel VBA のdebug(F8キー) が...
-
複数ファイルにある特定のシー...
-
Excelのワークシート上に検索窓...
-
TeraTermのマクロについて
-
エクセルでマクロ実行中に任意...
-
マクロを実行した日付をセルに...
-
開いているフォルダを全て閉じ...
-
マクロ BeforePrintイベントが...
-
Excel2000 データの並べ替えで...
-
EXCELのセルへ、デジタル時計を...
-
LibreOfficeでマクロが機能しない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ローマ字→カタカナへ変換(エク...
-
マクロ 実行ボタンを押さずに...
-
Excelを開いた時に表示さ...
-
Excel VBA のdebug(F8キー) が...
-
エラーになってないのにVBA...
-
EXCELのセルへ、デジタル時計を...
-
複数ファイルにある特定のシー...
-
エクセル グラフの軸の最小値最...
-
モジュール内のマクロを全て実...
-
Wordの画面を左右にスクロール...
-
ワードからエクセルへ貼り付け...
-
エクセルのマクロ機能で前のシ...
-
EXCEL 複数のシートの同一の位...
-
Excelマクロでオプションボタン...
-
エクセルで複数のシートをまと...
-
VBAでEXCELに埋め込んだPDFを開...
-
【Excel VBA】エラー番号400
-
EXCEL2000 VBA マクロ実行中に...
-
エクセルでマクロ実行中に任意...
-
Wordで「原稿用紙○枚」を換算す...
おすすめ情報