• ベストアンサー

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

【質問: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

  • エクセルのマクロについて

    マクロのコードについて質問です。 シート1のセルA1の値が更新されるたびに、シート2のA1,A2と値が自動で反映されていくマクロを教えていただけないでしょうか。 シート1をベースとして、セルA1に記入した日付をシート2の表に12ヶ月分蓄積させていきたいと考えてます。 誤記入して蓄積してしまう可能性も高い思いますが、勉強のため教えていただきたいです。 難しいとは思いますが、対応お願いいたします。

  • エクセルマクロでマクロをアクティブにしたくない

    エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。

  • エクセルのマクロで作成した関数を他のエクセルのファイルから参照できるのですか?

    エクセルVBAに関して質問です。 a.xlsというファイルに複数のシートがあり すべてのシートにあるデータと「計算」ボタンがあります。 「計算」ボタンを押下すると、マクロが実行され 計算結果が同じシートに表示されます。 データの内容はシートごとに違いますが、 「計算」ボタンで呼び出したいマクロはすべて同じです。 この「計算」ボタンを押すと実行されるマクロを b.xlsに記述したいのですが、 (他のエクセルのファイルにも使いまわしたいので) そのようなことは可能なのでしょうか。 またどのようにマクロを記述すればこのマクロを 呼び出すことができるのでしょうか。 分かりにくい文章で申し訳ございませんが ご教授くださるとうれしいです。

  • エクセルマクロでファイルを開いて保存したいです。

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 このSheet1には中央にコマンドボタンが作成して有ります。 このボタンをクリックして以下の作業をマクロで行いたいです。 1.エクセル標準の「ファイルを開く」のメッセージボックスが開く 2.ここは使用者が作業をしてもらう   マイドキュメントだったり、マイネットワークだったり、   (ファイルの種類はCSVにする)   処理をしたいCSVファイルを探してもらい選択後、開くをクリック   例えば20100922.CSVを選択し開くをクリック 3.クリックと同時にそのファイルが展開されて、「編集」のエクセルファイルの   Sheetにシート名「集計」が作成されそのシートにCSVファイルの全内容がセルA1から貼り付く。   さらに登録してあるマクロモジュールで編集処理がされ   マクロを引き継がず、シート「集計」だけを   ファイル名は固定でそのファイル名の後ろに作成日(システム日付)を入れて   参照したCSVファイルの保管場所に保存する。   ファイル名例:売上20100923.xls(売上は固定) 4.エクセル「編集」のファイルからシート「集計」を削除する。 5.メッセージBOXで「編集終了」と表示 次回エクセルファイル「編集」を開くと、コマンドボタンだけである。 また作成された「売上20100923」はマクロがないから開くときに マクロのメッセージは出ない。というようにしたいです。 NO.2のファイルを選択する作業は作業者にしてもらいますが シート1のコマンドボタン1回を押すだけでNO.1~NO.5まで完結させたいです。  NO.3のマクロ処理はマクロの記録でモジュールができています。 このマクロの作成方法と、そのマクロが出来たら その文のどこに作成済みの処理文を入れればいいのかわかりません。 よろしくお願いします。 ここでつまづいています。この後この選択したファイルの全内容が シートの集計に展開されません。 Private Sub CommandButton1_Click() Call 集計 End Sub Sub 集計() FullPath = Application.GetOpenFilename("CSV,*.CSV") If FullPath <> "False" Then Sheets("Sheet1").Select Sheets.Add ActiveSheet.Name = "集計" With ActiveSheet.QueryTables.Add(Connection:="CSV;" & FullPath, Destination:=Range("A1"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

  • 別のブックのセルの値をコピーするマクロについて

    ExcelのVBAのマクロに関する質問です。 複数のブックのセルの値をコピーするマクロについての質問なのですが、現在以下のファイルがあります。 サンプル1.xls サンプル2.xls サンプル3.xls データ.xls そして、 サンプル1のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA1~D1まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA1~D1まで、 サンプル2のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA2~D2まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA2~D2まで、 サンプル3のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA3~D3まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA3~D3まで、 上記のような形でコピーしたいのですがマクロがわかりません。 データ.xlsにボタンを作成し、そのボタンを押すとこの処理が実行されるようにしたいです。 どなかた方法を教えていただけますでしょうか。ご回答お待ちしております。 ※ファイルの名前は今回はサンプル1などとしましたが実際は違う名前も使用します。 また、ファイルの数も今回は3つにしましたが増減します。

  • 変数が混じる名前のブックへのシート移動 マクロ

    いつもお世話になっております。 マクロ実行用Book=A.xls マクロ1で作成したファイル=●●日報.xls(●●の部分は、A.xls内のセル番地"AB2"にある文字列で、毎回変わります) マクロ2で作成したファイル=Book1.xls (1)A.xlsにて、●●日報.xlsを作成し、保存します(●●日報.xlsは保存後、閉じています) (2)マクロ2を実行し、Book1.xlsを作成します。 (3)Book1.xlsのシート(このブックにはシートは1枚のみです)を、A.xlsのブックの末尾に移動し、●●日報.xlsを上書保存する。 この場合、マクロのコードはどう書くのが適切なのでしょうか。 マクロ初心者のため、どなたかご教示いただけましたら幸いです。

  • エクセル2007 マクロについて教えてください

    エクセルのデータが2個あります。 それぞれ、ファイル名は 顧客データ.xlsと個別シート.xlsです。 顧客データ.xlsには、10名のお客様の情報があり、A1セルには ID番号 と入力してあり、 A2~A11セルにID番号が入力されています。 『個別シート.xlsにマクロで顧客データ.xlsのデータをコピーし、ID番号のフォルダをデスクトップに新規作成し、ID番号を付けて保存する』マクロを作成中です。 顧客番号が1234のお客様のデータを、個別シートにコピーし、デスクトップに1234というフォルダを新規作成し、その中に 個別シート_1234.xls というファイル名で保存をしたいです。 顧客データを自動でコピーするまではできましたが、それ以降ができません。 MkDir "C:\ Documents and Settings\xxx\デスクトップ\nknk\ID " ChDir "C:\ Documents and Settings\xxxi\デスクトップ\nknk\ID " ActiveWorkbook.SaveAs Filename:="個別シート_" & ID & ".xls" ActiveWorkbook.Close マクロを実行すると『実行時エラー76:パスが見つかりません』とエラーになります。 (フォルダ作成の命令文のところが黄色くなります。) ちなみに、個別シートの指定したセルに、IDはコピーされています。 正しく実行できる文を教えてください。また、以降の命令文は正しいでしょうか。 よろしくお願いします。  

  • エクセルのマクロについて

    エクセルのマクロ初心者です。 マクロを使用して印刷プレビューが見れるようにしたいです。 vlookup関数を使いsheet1に入力し、sheet2,sheet3,sheet4、sheet5へデータを反映させています。 sheet1に入力画面を作成してあり、セルA2~A13に入力すればsheet2へ、セルA17~A28はsheet3へ、セルF2~F13はsheet4へ、セルF17~F28はsheet5へデータを反映する作りです。 sheet2~sheet5はフォーマットを作成してあり、印刷するとA4で2枚印刷されるようになっています。 入力画面で入力した内容によってはA4用紙1枚ですむこともあります。(A1~M15でA4用紙一枚、A1~M31でA4用紙2枚) 教えて頂きたいことは。 ・入力画面にマクロのボタンを設置し、ボタンをクリックすると印刷プレビューが表示されるようにしたいです。 ・sheet2用、sheet3用、sheet4用、sheet5用、とボタンを設置したい。 ・印刷プレビュー後に、(実際には印刷後)に入力画面を表示したい。 ・印刷プレビューが見たいのはsheet2,sheet3,sheet4,sheet5です。 以上です。 説明が下手ですみません><

  • エクセルのマクロで、別ファイルの数値を参照する方法

    現在aaa.xlsというファイルを開いていて、 そのセルA1には20070621という数値が入っています。 別にbbb_20070621.xlsというファイルがあって、 そのファイルのsheet1内の、B1の値を参照したいと思います。 bbb_20070621.xlsのようなファイルが無数にあるので、 ファイルを開かなければいけないINDIRECT関数は使いたくありません。 =INDIRECT("[bbb_"&A1&".xls]Sheet1!B1") ファイルを開かず参照できるように、 できればマクロ(VBA)で組みたいと思っています。 RangeやCellでいろいろ試してみたのですが、 どうもうまくいかず、 分厚いマニュアルにも書いてありませんでした。。 初歩的な質問ですいませんが、 どなたかよろしくお願いします。

  • 初心者です。エクセルの「ファイル1」と「ファイル2」の別ファイルで そ

    初心者です。エクセルの「ファイル1」と「ファイル2」の別ファイルで それぞれのA-1セル同士をイコールで反映させることって できるんでしょうか?(「ファイル1」内の「シート1」と「シート2」では可能ですよね。)もしできるなら、 どのように公式したらよいか、解りやすく教えて下さい。 可能であると解ってる「シート1」に入力した値が「シート2」に反映するように作ってしまうと、シート2のみ更新して保存したくても「シート1」も もれなくついてきてしまいますよね。だから、別ブックで作成して あるセルの値のみ 別ブックのセルに入っていくようにしたいのです。PCはXPでエクセルは2003です。宜しくお願いします。  

専門家に質問してみよう