質問者
sheet1の内容をすべてコピーしsheet2に値貼り付けるマクロ

質問
すべての返信
-
s-koji7899さん、おはようございます。
まさに「ファイルを開くと同時にsheet1の内容をすべてコピーしsheet2に値貼り付ける」及び「ファイルを保存する」でインターネットで検索すると色々出てくると思いますので、自力で十分目的のVBAの解答に到達できると思いますが…。
ちなみに、自分自身を開くときなら、VBEで、ThisWorkbookの「Private Sub Workbook_Open()」にコードを作成する。別のエクセルファイルを開くときなら、VBEで標準モジュールを挿入して、そこに別のエクセルファイルを開くと同時にsheet1の内容をすべてコピーしsheet2に値貼り付け保存するコードを作成する。
ご参考まで。
- 編集済み KokemomoYamamomo 2019年7月3日 5:59 間違った返事を削除
-
s-koji7899さん、おはようございます。
参考までに、ブックを開くとそのブックのSheet1の内容をすべてコピーしてSheet2に値のみ張り付けてファイルを上書き保存するマクロをサンプルとして記しておきます。VBEのThisWorkbookに作成します。
Private Sub Workbook_Open()
'このブックのSheet1をSheet2に値のみコピーする
With ThisWorkbook
'Sheet1からSheet2へコピー
.Worksheets("Sheet1").Cells.Copy
.Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValues
'SHeet2をアクティブにしてSheet2のシート全セルの選択を解除
.Worksheets("Sheet2").Activate
ActiveCell.Select
'コピーモードを解除
Application.CutCopyMode = False
'このブックを上書き保存
.Save
End With
End Sub -
なお、マクロを走らせておいて、別のファイルが開かれると同時にこれをキャッチしてそのsheet1の内容をすべてコピーしsheet2に値貼り付け保存する、というマクロは、マクロ実行中は、他のエクセルをいじることができないので無理、ではないかと思います。ご参考まで。
よくわかりませんがほかのブックを開いたときにイベントを
発生させることを言っているのでしょうか。
それなら、Application.WorkbookOpen イベントを使えばいいです。クラスモジュールに以下のコードを書き、
' クラスモジュール: Class1 (モジュール名は適宜変更) ' 変数宣言を強制 Option Explicit ' Application のイベントを取得するための変数 Dim WithEvents xlApp As Application ' クラスのコンストラクタ Private Sub Class_Initialize() ' Application のイベントを受け取れるようにする Set xlApp = Application End Sub ' Application.WorkbookOpen イベント ' ワークブックを開いたとき Private Sub xlApp_WorkbookOpen(ByVal wb As Workbook) ' ワークブックを開いたときに行う処理 End Sub
標準モジュールあたりに
Dim cl As Class1 Sub test() Set cl = New Class1 End Sub
と書いて test プロシージャを 1 回実行しておけば、そのあとに
クラスインスタンスが初期化されるまで Application のイベントを
受け取ることができます。
(Application.EnableEvents = False とするとイベントが
発生しなくなるので注意)
- 編集済み infade 2019年7月3日 4:40 書式が間違っていたので修正