2017-06-11 3 views
0

ここにシナリオがあります。私は、複数のExcelワークブックで、データをコピーしてお互いに貼り付けることができます。したがって、マクロはあるブックから.copy.closeを開き、open.paste.closeを別のブックに開きます。私は、ファイルが閉じられたときにマクロを自動的に実行する関数を作成しています。アクティブなブックでのみ自動クローズを実行するようにVBAコードを作成するにはどうすればよいですか?

問題があります。ブック1のマクロボタンをクリックすると、ブック2からopen.copy.closeを実行することになっています。ただし、ブック2のファイルが閉じられたときに自動実行されるため、エラーが発生します(2つのマクロは同時に実行できません)これに対する解決策はありますか?私は、ファイルが閉じられているときに自動実行マクロだけを解決するソリューションを探していますが、それはアクティブワークブックです。ここで私は今持っているものです。

Workbook 1 
Sub workbook_beforeclose(cancel As Boolean) 
Application.Run "Sheet1.UpdateYellowTabs_Click" 

End Sub 

Workbook 2 
Sub Workbook_BeforeClose(Cancel As Boolean) 
Workbook.BeforeClose 
Application.Run "Sheet12.UpdateGreen_Click" 
End Sub 

どのように私はそれがアクティブなとき、この実行のみ/人間のユーザとしない場合は、マクロによってオープン/クローズによって閉じ作るだけに、ブックのコードでそれをコーディングしますか?

ありがとうございます!

答えて

0

私はこの最終目標を理解することはできませんが、私は "技術的な"質問に答えることができます。技術的には、指定したワークブックがアクティブであるかどうかを確認したい場合:EDIT

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    If Not Application.ActiveWorkbook Is Me Then Exit Sub ' <-- add this test 

    '''''''''''''''''''''''''' 
    ' Whatever code goes here 
    '''''''''''''''''''''''''' 
End Sub 

If Application.ActiveWorkbook Is Meしかし、問題はwb2.closeを起動すると、実行中に、ブックwb2「アクティブ」ものを作るということですマクロしたがって、この方法は機能しません。別の方法は、ブックを閉じる前にイベントを無効にすることです。イベントWorkbook_BeforeCloseは発生しません。その後、必要に応じてイベントを有効にすることができます。コードは次のようになります。

' ... open wb2 and do the work with it 
Application.EnableEvents = False 
wb2.Close False 
Application.EnableEvents = True 

通知を、あなたはすでに、この追加のコードが必要とされない通常推奨される現在のマクロ、の初めにイベントを無効にした場合。

+0

こんにちは、私はあなたのコードを試して、それは本質的に何をしたいですか。しかし、それは動作していません。私はルーチン 'workbook_beforeclose'に、それを含むブックが「アクティブブック」である場合にのみ実行するようにしました。ワークブックをアクティブ化または非アクティブ化して、マクロがどのマクロを認識できるようにする必要がありますか? – Carmen

+0

@Carmenは、 'wb1'のコードで' wb2'を終了する場合、 'wb1'をアクティブにすることで、' wb2'を閉じる前にそれを非アクティブにする方法を見つけ出すという考え方です。 'wb1.Activate:wb2.close'のようなものです。 –

+0

私はそれの技術的な部分を理解して以来、それを実験してきました。 wb1とwb2を別々に起動し、 'wb1.activate:wb2.close'を挿入しましたが、まだ動作していません。ブックコードまたはモジュール/ワークシートにコードを追加しますか? 'サブWorkbook_BeforeClose(ブール値としてキャンセル) ないApplication.ActiveWorkbookは私が次にサブ Application.Run「Sheet12.UpdateGreen_Click」私は私がする必要があり、各ワークブックに定義された後も、これでエラーが発生します 終了Sub'を終了している場合は活性化および非活性化。 – Carmen

関連する問題