2017-05-06 15 views
1

私は2つのワークブック(ワークブックA)と計算に使用するワークブック(ワークブックB)を持っています。Excelマクロワークブック特定のワークブック特定のワークブック

ワークブックBは、次のコードの実行を閉じているとき、それをリセットする...

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Range("B2:B4,B6:B8,B10:B12,B14:B16,B18:B20,B22:B24,B26:B28,B30:B32").ClearContents 
    Range("B2").Select 
    ActiveWorkbook.Save 
End Sub 

問題は、ワークブックBが開いているが、ワークブックAがフォアグラウンドである間、誰かがExcelを終了した場合、あなた実行時エラー '1004'が表示されます。

他のブックが開いているかフォアグラウンドになっているかにかかわらず、ブックBで上記のコードを実行するようにマクロを変更するにはどうすればよいですか?

ご協力いただきありがとうございます。

答えて

3

範囲がどのワークシートに表示されているかはわかりません。おそらく、

Option Explicit 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Cancel = False 
    With ThisWorkbook.Worksheets("sheet1") 
     .Range("B2:B4,B6:B8,B10:B12,B14:B16,B18:B20,B22:B24,B26:B28,B30:B32").ClearContents 
     .Range("B2").Name = "openHere" 
     Application.Goto Reference:="openHere" 
     .Parent.Save 
    End With 
End Sub 

名前付きセルを選択することができ、それが、Application.Goto上のセルを.Selectするために、ワークシートをアクティブにする必要があります。私はworbookスコープで定義された名前を使用するように上記のコードを調整してから、Application.Gotoそのセルを調整しました。

+0

これは、 "Rangeクラスのメソッドの選択に失敗しました"というエラーを表示します。 –

+0

はい、ワークシートをアクティブにしてから、そのワークシート上のセルを選択する必要があります。上記のコードを調整しましたが、値をクリアしてWorkbook_Openを使用してB2を選択する方がよい場合があります。 – Jeeped

+0

それはトリックでした、ありがとう。完了時にExcelが終了することはありませんが、私は単に.Parent.Closeを呼び出して解決します。手伝ってくれてどうもありがとう。 –

関連する問題