ハマっている「お菓子」を教えて!

お世話になります。

現在シート単位に実行するマクロ1があります。

これを、全てのシートに対して、マクロ1を実行したいのですが、どのようにすればよいでしょうか?
※現在は、シートが終わる毎に手動でマクロ1を実行して、それが終われば次のシートへという形です。

大変お手数ですが、何卒よろしくお願いします。

A 回答 (5件)

全てのシートに同じマクロ、ということは


そのマクロはアクティブシートに対して処理してるはずですから
該当シートをアクティブにしながら実行されなければいけないので
以下のようになります。

'-------------------------------------------
Sub Test()
Application.ScreenUpdating = False
 Dim Sht As Worksheet
   For Each Sht In Worksheets
     Sht.Select
     Call マクロ1
   Next Sht
Application.ScreenUpdating = True
End Sub
'--------------------------------------

全てのシートをアクティブにしながら実行しますので画面がちらつきます。
それを抑えるのが、ScreenUpdatingメソッドです。

違いを見る為に最初は、それを抜いて実行してみてください。

 
    • good
    • 7

すみません


突っ込むコードが漏れていましたね。今さら無意味なんですが、ご参考まで。Call文の直前に入れます。
  Sheets(Worksheets(i).Name).Select
    • good
    • 11

こんにちは


#1です。
 すでに#3の方が決定打のFOR EACH文で投稿されているので、私のフォローは無意味だと思いますが、シートをアクティブにするコードが足りないです。
    • good
    • 1

マクロのシート名を変数にしてやればいいではないでしょうか。


-------------------------------------
dim WS as object :’シート変数
dim WN(10) as String :'シート名(今は10シートにした。)

'シート名セット
WN(1)="Sheet1":'ココのシート名は自由
WN(2)="Sheet2"":'ココのシート名は自由
WN(3)="Sheet3"":'ココのシート名は自由

WN(10)="Sheet10"":'ココのシート名は自由

'処理中に画面がチラチラしないようにする
Application.ScreenUpdating = False

'実行
For i=1 to 10
Set WS=Worksheets(WN(I))

'マクロ実行(この中のマクロのシート名は、WN(I)に直す。)

Next I
-------------------------------------
のような感じで作ります。

この回答への補足

ご返事ありがとうございます。

シート名がデフォルトのSheet1等ではなく、個別の、不規則な名前なのです。

1つのエクセルに100シート、それが、50個ほどありますので、名前を指定することなく、実行したいのです。

よろしくお願いします。

補足日時:2009/03/10 15:15
    • good
    • 3

こんにちは


オーソドックスな?一例です。
Option Explicit
Sub TestMain()
 Dim i As Integer

 For i = 1 To Worksheets.Count
  'Call マクロ1
 Next
End Sub

この回答への補足

ご返事ありがとうございます。

上記の'callマクロ1 の箇所だけ変更して実行したのですが、
シートが次のシートにいかず、同じシートで、シート数分マクロ1を繰り返してしまいます。

一つのシートにマクロ1を1回だけ実行して、次のシートに移動したいのです。

よろしくお願いします。

補足日時:2009/03/10 15:17
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報