- ベストアンサー
エクセルで新たなファイルを開くマクロ
【質問:1】 ○○○.xlsというファイル上で、 ボタンを押すと、 ×××.xlsというファイルを ”マクロを有効にする”で開いて、 (どちらもマイドキュメントに保存してあります) かつ、 ○○○からの自動リンクを反映させ更新し、 (通常ですとダイヤルログボックスがでますよね) ×××のシート1のA1セルをアクティブにする というマクロはどのように書けばいいでしょうか? 【質問:2】 ×××.xlsにおいて、 ボタンを押すと、 ×××を”保存せずに閉じ”て、 かつ○○○.xls(既に開いてあります)の シート1のA1セルをアクティブにする というマクロはどのようにかけばいいでしょうか? よろしくご教示のほどお願い致します。
- みんなの回答 (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も、同様にブック終了時に起動されますモジュールです。
その他の回答 (4)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
再度田吾作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)
どもども田吾作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のコード ここまで*****
お礼
非常に丁寧なご回答ありがとうございました。 わかりやすく、今後の参考にしたいと思います。
- nishi6
- ベストアンサー率67% (869/1280)
ツール→オプション→ 全般タブでマクロウイルスから保護するをオフ 編集タブでリンクの自動更新前にメッセージを表示するをオフ としておきます。 両方とも、ファイルを開く前のメッセージですね。これをオンにしておいて、○○○.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
お礼
これもいけました。 ありがとうございました。
- harisun
- ベストアンサー率14% (1/7)
○○○.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 と書きます。 リンクがあっても自動更新すると思います。 お試しください。
お礼
早々とご回答ありがとうございました。
お礼
ばっちりうまくいきました。 ありがとうございました。