• ベストアンサー

Excelのマクロを実行するきっかけとなるイベントについて

マクロのイベントに「ワークシートの追加」(Private Sub Workbook_NewSheet(ByVal Sh As Object))がありますが、「ワークシートのコピー」をきっかけに、マクロを実行したい場合は、どのようにすればよいでしょうか? シートタブを右クリックして、コピーを追加のチェックボックスをONにして、同一ブック内にシートをコピーする操作の直後に、マクロを実行したいと考えています。 お知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 本来、シートコピー自体から、マクロを作れば、このようなものは必要ないはずです。

ikezawa3
質問者

お礼

シートコピーからマクロにする?! たしかに…そうですね… 非常に恥ずかしいのですが、そもそものアプローチが間違っていましたね。 今回はシートコピーからマクロにすることにしたいと思います。 皆さんにいろいろ教えていただきながら、こんなオチで申し訳ありません。 ありがとうございました。

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

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

ikezawa3
質問者

お礼

ご回答、ありがとうございました。 いろいろな操作を考慮すると意外と複雑なマクロになってしまうのですね。 勉強になりました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

一案です 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を利用した案です 参考まで

ikezawa3
質問者

お礼

ありがとうございます。 ワークシートの数を数えればよいのですね。 参考にさせていただきます。