2011-01-05 5 views
0

私は現在、複数のワークシートで5つのワークブック(おそらく時間の経過とともに増加する)をとり、それらを1つのワークブックにまとめたかなり大きなマクロを作成しています。グローバル・ワークブックのリファレンス!

今、私は、ワークブックへのグローバル参照を宣言することが必要な、さまざまなタスクをすべて実行する最も簡単な方法を考えました。しかし、それは動作していないようです。

だから、私はとしてそれを宣言した:

Public E1_workbook   As Workbook 

とマクロがキックオフされたときに、それをインスタンス化します。

Private Sub Begin() 

     ... 
     Set E1_workbook = Workbooks.Open(Filename:="Workbook name") 

     ... 
     'Do other stuff 
     ... 

     Whatever 

     ... 

     'Close workbooks and free up resources... 

     ... 

    End Sub 

そして、さらに下の別のサブルーチンでは、私はワークブックを使用しよう:

private sub Whatever() 

     E1_workbook.Worksheets("worksheet name").Select 

しかし、これはさえ

を「ワークシートクラスのselectメソッドが失敗した」と述べて失敗します私は上記の 'Whatever()'サブの正確な行を 'Begin()'サブにコピーすることができますが、それはうまく動作します。

なぜですか?

TIA

(ワークブックおよびワークシートの名前が無実を保護するために変更されている)

答えて

2

私はあなたがどのような関数を呼び出す前に、ワークブックのカップルを開いていると仮定します。 アクティブワークブックSelect関数を呼び出すことができます。あなたがE1_workbook.Worksheets("worksheet name").Selectの前でE1_workbook.Activateを追加する必要があると意味

シート「ワークシート名は」あなたもxlSheetHidden

に値を設定することで、再びあなたはシートを非表示にすることができ E1_workbook.Worksheets("worksheet name").Visible = xlSheetVisibleを使用することによって、それが見えるようにする必要がある隠されたシートである場合

ところで、すべてのワークブックをコレクションまたは配列に入れ、パブリックグローバルを使用するのではなく、この配列を関数に渡すことをお勧めします。これを行う方法の1つは、

Private Sub begin() 
    Dim srcWorkbooks As Collection 

    Set srcWorkbooks = New Collection 
    srcWorkbooks.Add workbooks.Open("fileName1") 
    srcWorkbooks.Add workbooks.Open("fileName2") 

    whatever srcWorkbooks 
End Sub 

Private Sub whatever(srcWorkbooks As Collection) 
    Dim srcWorkbook As Workbook 

    For Each srcWorkbook In srcWorkbooks 
     srcWorkbook.Activate 
     srcWorkbook.Sheets(1).Select 
    Next srcWorkbook 

    closeWorkbooks srcWorkbooks 
End Sub 

Private Sub closeWorkbooks(srcWorkbooks As Collection) 
    Dim i As Integer 

    For i = srcWorkbooks.Count To 1 Step -1 
     srcWorkbooks(i).Close 
     srcWorkbooks.Remove i 
    Next i 

    Set srcWorkbooks = Nothing 
End Sub 
+0

です。返信する時間を取ってくれてありがとうございます。私はちょうど私がばかだと分かっています。ワークシートを参照しようとする前にワークブックを有効にしておく必要があります。もっとコーヒーがあると思う。あなたの時間を無駄にして申し訳ありません! – JustAPleb

+0

オハイオ州、コレクションについての良いアイデア - 私はそれを使用します。 Ta :-D – JustAPleb

関連する問題