【質問:1】
○○○.xlsというファイル上で、
ボタンを押すと、
×××.xlsというファイルを
”マクロを有効にする”で開いて、
(どちらもマイドキュメントに保存してあります)
かつ、
○○○からの自動リンクを反映させ更新し、
(通常ですとダイヤルログボックスがでますよね)
×××のシート1のA1セルをアクティブにする
というマクロはどのように書けばいいでしょうか?
【質問:2】
×××.xlsにおいて、
ボタンを押すと、
×××を”保存せずに閉じ”て、
かつ○○○.xls(既に開いてあります)の
シート1のA1セルをアクティブにする
というマクロはどのようにかけばいいでしょうか?
よろしくご教示のほどお願い致します。
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
と書きます。
リンクがあっても自動更新すると思います。
お試しください。
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
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のコード ここまで*****
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
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も、同様にブック終了時に起動されますモジュールです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/08/04 13:56
- Excel(エクセル) マクロを教えてください 1 2022/11/28 14:52
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/03/31 12:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォルダ内の全ブックのシート...
-
フォルダ内の全ブックのシート...
-
ExcelVBAで今開いているユーザ...
-
【ExcelVBA】指定の書式で、マ...
-
すでに開いているブックのマク...
-
エクセルVBA Workbook変数に変...
-
VBA ファイルの開き方
-
[Excel VBA] フォルダ内の複数...
-
VB2010でExcelの行をコピーして...
-
同じ名前で拡張子が違うファイル
-
EXCELマクロでxlsとxlsxを開く方法
-
EXCEL VBA起動時の処理
-
複数のデータ系列の線の太さを...
-
【マクロ】その時、その時で変...
-
ファイル名を今日の日付、時刻...
-
VBA マクロ実行時エラー’1004Ra...
-
エクセル終了時の保存確認メッ...
-
別のパソコンでエクセルのマク...
-
EXCEL マクロ クリップボードク...
-
VBAを一度起動するとずっと出て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォルダ内の全ブックのシート...
-
ExcelVBAで今開いているユーザ...
-
エクセルVBA Workbook変数に変...
-
フォルダ内の全ブックのシート...
-
【Excel VBA】ブックを複数開い...
-
【ExcelVBA】指定の書式で、マ...
-
VB2010でExcelの行をコピーして...
-
フォルダ内の全てのBookに同じ...
-
EXCELマクロでxlsとxlsxを開く方法
-
excelマクロ、任意セルの値で名...
-
[Excel VBA] フォルダ内の複数...
-
VBA、Excelのworkbook.open に...
-
すでに開いているブックのマク...
-
EXCELマクロで上書きメッ...
-
VBA セル入力された日付データ...
-
EXCEL VBA起動時の処理
-
エクセルのマクロについて教え...
-
他のBookのユーザー定義関数を使う
-
Excel VBAを後ろで動かす方法
-
Excelの一括印刷で通し番号をつ...
おすすめ情報