- ベストアンサー
Excelのマクロを実行するきっかけとなるイベントについて
マクロのイベントに「ワークシートの追加」(Private Sub Workbook_NewSheet(ByVal Sh As Object))がありますが、「ワークシートのコピー」をきっかけに、マクロを実行したい場合は、どのようにすればよいでしょうか? シートタブを右クリックして、コピーを追加のチェックボックスをONにして、同一ブック内にシートをコピーする操作の直後に、マクロを実行したいと考えています。 お知恵をお貸しください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 #1さんの応用のようなものですが、シートコピーのみで、これで可能なはずです。 'ThisWorkbook モジュール Dim i As Integer Private Sub Workbook_SheetActivate(ByVal Sh As Object) j = ThisWorkbook.Sheets.Count If Sh.Name Like "*(#*)" And j > i Then MsgBox "シートがコピーされました。", vbInformation 'ここにマクロを入れる End If i = ThisWorkbook.Sheets.Count End Sub 本来、シートコピー自体から、マクロを作れば、このようなものは必要ないはずです。
その他の回答 (2)
- end-u
- ベストアンサー率79% (496/625)
Workbook_NewSheetを除外したい場合は工夫が必要かもしれませんね。 'ThisWorkbook Module Option Explicit Dim flg As Boolean Dim shCount As Long Dim shName As String Private Sub Workbook_NewSheet(ByVal Sh As Object) flg = True End Sub Private Sub Workbook_Open() shCount = Sheets.Count End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim n As Long n = Sheets.Count If n <> shCount Then If n > shCount Then shName = Sh.Name Application.OnTime Now, Me.CodeName & ".test" End If shCount = n End If End Sub Private Sub test() If flg Then flg = False Else MsgBox shName End If End Sub
お礼
ご回答、ありがとうございました。 いろいろな操作を考慮すると意外と複雑なマクロになってしまうのですね。 勉強になりました。
- hige_082
- ベストアンサー率50% (379/747)
一案です Dim stc As Integer Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Worksheets.Count > stc And stc > 0 Then MsgBox "ここに処理を" End If stc = Worksheets.Count End Sub SheetActivateを利用した案です 参考まで
お礼
ありがとうございます。 ワークシートの数を数えればよいのですね。 参考にさせていただきます。
お礼
シートコピーからマクロにする?! たしかに…そうですね… 非常に恥ずかしいのですが、そもそものアプローチが間違っていましたね。 今回はシートコピーからマクロにすることにしたいと思います。 皆さんにいろいろ教えていただきながら、こんなオチで申し訳ありません。 ありがとうございました。