• ベストアンサー

エクセルで新たなファイルを開くマクロ

【質問:1】 ○○○.xlsというファイル上で、 ボタンを押すと、 ×××.xlsというファイルを ”マクロを有効にする”で開いて、 (どちらもマイドキュメントに保存してあります) かつ、 ○○○からの自動リンクを反映させ更新し、 (通常ですとダイヤルログボックスがでますよね) ×××のシート1のA1セルをアクティブにする というマクロはどのように書けばいいでしょうか? 【質問:2】 ×××.xlsにおいて、 ボタンを押すと、 ×××を”保存せずに閉じ”て、 かつ○○○.xls(既に開いてあります)の シート1のA1セルをアクティブにする というマクロはどのようにかけばいいでしょうか?  よろしくご教示のほどお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.5

他の方の回答でいいと思いますが、すこしだけ簡単に記述できますので、ご参考までに。 【質問:1】 Sub ボタン1_Click() Dim book As Workbook Set book = Workbooks.Open("XXX.xls",3) book.Activate book.Worksheets(1).Select book.Worksheets(1).Range("A1").Select End Sub 【質問:2】 XXX.xlsでVisual Basic Editorを開いて、プロジェクトエクスプローラーのThisWorkbookを選択して、ThisWorkbookのコードウィンドウを開きます。コードウィンドウに下記を記述します。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim book As Workbook ThisWorkbook.Saved = True Set book = Workbooks("○○○.xls") book.Activate book.Worksheets(1).Select book.Worksheets(1).Range("A1").Select End Sub なお、下記のURLにあるように、Workbook_Beforeが動作しないケースに該当する場合は、標準モジュールを追加して、下記のようにしても、OKです。 Sub Auto_Close() Dim book As Workbook ThisWorkbook.Saved = True Set book = Workbooks("○○○.xls") book.Activate book.Worksheets(1).Select book.Worksheets(1).Range("A1").Select End Sub Workbook_BeforeCloseは、ブックが閉じる直前に動作するモジュールで、Thisworkbook.saved = Trueとすることで、変更がないものとされますので、保存のメッセージがでなくなります。 Auto_Closeも、同様にブック終了時に起動されますモジュールです。

oresama
質問者

お礼

 ばっちりうまくいきました。 ありがとうございました。

その他の回答 (4)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

再度田吾作7です。 すいません訂正です。。。 順番間違いました。 以下のソースを   'nextBookの先頭のワークシートをアクティブにする   nextBook.Worksheets(1).Select   'セルA1を選択する   nextBook.Worksheets(1).Cells(1).Select   'nextBookをアクティブにする   nextBook.Activate このようにしてください   'nextBookをアクティブにする   nextBook.Activate   'nextBookの先頭のワークシートをアクティブにする   nextBook.Worksheets(1).Select   'セルA1を選択する   nextBook.Worksheets(1).Cells(1).Select

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

どもども田吾作7です。 普段はVBの方に回答しております。 コードで開いたら、おそらくマクロのセキュリティは問われないのでは? リンクの自動更新は、ブックオープン命令のオプション値で指定が出来ます。 UpdateLinks:=3 開かれるブックの方にコードを書いていいものかどうかわからなかったので、クラスモジュールを使用する方法を記します。 これをすることにより、開いたブックの「閉じる直前イベント」を、開く命令を送ったブック側で認識することができます。 閉じる直前に、ブックがセーブを既にしてあるように見せかけると、「保存しますか?」のダイアログは表示されません。 コードを記します。 必要なもの 標準モジュール(Module1など) クラスモジュール(Class1) ← これは、名前固定です。 この二つのモジュールは、開く命令を行うブックの中に組み込んでください。 '*****Module1のコード ここから***** Option Explicit 'クラス Private MyClass As Class1 Sub WorkbookOpen()   Dim wkFilePath   As String  '開きたいワークブックのフルパス   Dim nextBookName  As String  'このプログラムで開いたワークブックが、閉じるときにアクティブになるワークブック名   'ここには開くファイルのフルパスを入れてください。   wkFilePath = "C:\My Documents\Book1.xls"      '終了後にアクティブにしたいブック名をセットします。   '【注意】このプログラムでは、別のブックを開く前のアクティブなブックを指定してます。   '    お使いの環境に合わせて、次にアクティブにしたいブック名を代入してください。   nextBookName = ActiveWorkbook.Name            'マクロ有効・オープン時にリンクの自動更新   Workbooks.Open Filename:=wkFilePath, UpdateLinks:=3      'ワークブックの先頭のワークシートをアクティブにする   ActiveWorkbook.Worksheets(1).Select      'セルA1を選択する   ActiveWorkbook.ActiveSheet.Cells(1).Select            'これはクラスモジュールを使用して、終了時を監視します。(※クラスモジュールのコード参照)   Set MyClass = New Class1   MyClass.setBook ActiveWorkbook, Workbooks(nextBookName) End Sub '*****Module1のコード ここまで***** '*****Class1のコード ここから***** Option Explicit '監視するワークブック Public WithEvents exlBook  As Excel.Workbook '監視するワークブックが終了後にアクティブになるブック Public nextBook As Excel.Workbook '監視するブックを得る Public Function setBook(inBook As Excel.Workbook, inNextBook As Excel.Workbook) As Boolean   Set exlBook = inBook   Set nextBook = inNextBook End Function '閉じるイベントが発生!! Private Sub exlBook_BeforeClose(Cancel As Boolean)   'nextBookの先頭のワークシートをアクティブにする   nextBook.Worksheets(1).Select   'セルA1を選択する   nextBook.Worksheets(1).Cells(1).Select   'nextBookをアクティブにする   nextBook.Activate      'nextBookの開放   Set nextBook = Nothing            'セーブを既にしてあるように装う   exlBook.Saved = True      'exlBook開放(監視終了)   Set exlBook = Nothing End Sub '*****Class1のコード ここまで*****

oresama
質問者

お礼

 非常に丁寧なご回答ありがとうございました。 わかりやすく、今後の参考にしたいと思います。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

ツール→オプション→   全般タブでマクロウイルスから保護するをオフ   編集タブでリンクの自動更新前にメッセージを表示するをオフ としておきます。 両方とも、ファイルを開く前のメッセージですね。これをオンにしておいて、○○○.xlsが開く前にオフにするには・・・?(他の回答者からの答えを期待しましょう) Excelの設定としてオフにしています。これでいいのかな? ○○○.xlsのコマンドボタン(CommandButton1として)には Private Sub CommandButton1_Click()   Workbooks.Open "C:\My Documents\×××.xls"   Workbooks("×××.xls").Worksheets("Sheet1").Range("A1").Select End Sub ×××.xlsのコマンドボタン(CommandButton1として)には Private Sub CommandButton1_Click()   ThisWorkbook.Saved = True: ThisWorkbook.Close   Workbooks("○○○.xls").Worksheets("Sheet1").Range("A1").Select End Sub

oresama
質問者

お礼

 これもいけました。 ありがとうございました。

  • harisun
  • ベストアンサー率14% (1/7)
回答No.1

○○○.xlsをa.xls, ×××.xlsをb.xlsとします。 a.xlsのSheet1にcommandbuttonを作成してWクリックでコードを開き、 Private Sub CommandButton1_Click() Workbooks.Open Filename:="C:\My Documents\b.xls" Sheets("Sheet1").Cells(1, 1).Select End Sub と書きます。 b.xlsのSheet1にも同様に、 Private Sub CommandButton1_Click() Workbooks("a.xls").Activate Sheets("Sheet1").Cells(1, 1).Select Workbooks("b.xls").Close False End Sub と書きます。 リンクがあっても自動更新すると思います。 お試しください。

oresama
質問者

お礼

早々とご回答ありがとうございました。

関連するQ&A