2016-08-30 5 views
0

私の最新の質問はthis postを参照しています。私はブックのmacroを1枚ずつ呼び出すMaster macroを持っています。 「概要」シートの前の投稿のmacroから次のシートの別のmacroに行くことに応じてSubscript out of rangeエラーが発生します。私は、エラーMaster macroシートを削除することができます.Selectステートメントを削除し、1行でシートを識別しながらマクロを呼び出すことができると思う。どんな助け?それはCall ReformatSummarySheets("Boston").Selectの後に来エラーで、今ではどのようVBA-シートごとにマクロを呼び出す

Sub ReformatTheWorkbook() 

Sheets("Summary").Select 
Call ReformatSummary 

Application.Run "RefreshAllStaticData" 
Application.OnTime Now + TimeValue("00:00:05"), "Part2RTW" 

End Sub 


Sub Part2RTW() 

Sheets("Boston").Select 
Call ReformatSheetAndAddDropdowns 

Sheets("London").Select 
Call ReformatSheetAndAddDropdowns 

Sheets("Hong Kong").Select 
Call ReformatSheetAndAddDropdowns 

End Sub 
+0

「再フォーマット」サマリには何がありますか? – OpiesDad

+1

ワークシートをパラメータとして渡します。 – Comintern

+1

下付き文字範囲外のエラーは、通常、シートが存在しないことを示します。「ボストン」と呼ばれるシートがありますか? – OpiesDad

答えて

2

Sub ReformatTheWorkbook() 

    Sheets("Summary").Select 
    Call ReformatSummary 

    Sheets("Boston").Select 
    Call ReformatSheetAndAddDropdowns 

    Sheets("London").Select 
    Call ReformatSheetAndAddDropdowns 

    Sheets("Hong Kong").Select 
    Call ReformatSheetAndAddDropdowns 

End Sub 

これは私が何をしたいですが、Sheet("name").Selectは、次のシートを識別することなく、 Cominternがコメントしたことの例を以下に示します。ワークシートをパラメータとして渡す必要があります。

Sub ReformatSummary(ws As Worksheet) 
    'instead of ActiveSheet.Range("A1").Value = "Test" use: 
     ws.Range("A1").Value = "Test" 
End Sub 
Sub ReformatSheetAndAddDropdowns(ws As Worksheet) 
    ....Whatever you are doing to the sheets 
End Sub 

Sub ReformatTheWorkbook() 
    Call ReformatSummary(Sheets("Summary")) 
    Call ReformatSheetAndAddDropdowns(Sheets("Boston")) 
    .... 
End Sub 

これは、ワークシートをパラメータとして渡します。このプロシージャでパラメータを使用する場合は、「ActiveSheet」として実行していた作業ではなく、ワークシートを使用する必要があります。

だから、あなたはこれがあなた、が代わりにTestValue

に等しい選択されたシートでセルA1を設定します

ActiveSheet.Range( "A1")。値= "でtestValue" のようなコードがある場合

ws.Range("A1").Value = "TetsValue" 

を使用する必要があり、これはTestValue

に等しいオブジェクト wsに定義されたシートでセル A1をセットしますこの例では

コメントで述べたように、ワークシートオブジェクトは声明Sheets("Summary")

によって生成され、これは、しかし、あなたが持っているエラーメッセージが一致していません。下付き文字範囲外エラーは通常、オブジェクトが存在しないことを示します。この場合、「ボストン」という名前のシートがないと思います。

+0

申し訳ありませんが、私はまだVBAによくないです。 ReformatSummaryの最初のマクロを実行していたらどうなりますか?私はそれがどこに行くのか混乱している。 – plankton

関連する問題