|
修正と全体ソースです。気づかれた方もいらっしゃると思いますが
インスタンスが生成されて増えていくソースでしたので
インスタンスを消す処理と初期時の処理も入れました。
'******** シートオブジェクトモジュール *******
Private Sub Worksheet_Activate()
Call testWrapRowOn
End Sub
Private Sub Worksheet_Deactivate()
Call testWrapRowOff
End Sub
'******** 標準モジュール *******
'標準モジュール
Option Explicit
Dim drow As CWrapRow
'行挿入コマンドのラップ開始
Function testWrapRowOn()
'既にインスタンスが生成されている場合は作らない
If drow Is Nothing Then
Set drow = New CWrapRow
drow.Initialize
End If
End Function
'行挿入コマンドのラップ終了
Function testWrapRowOff()
If drow Is Nothing Then
Exit Function
End If
drow.Terminate
Set drow = Nothing
End Function
Sub Auto_Open()
Call testWrapRowOn
End Sub
Sub Auto_Close()
Call testWrapRowOff
End Sub
'******** クラスモジュール *******
'クラスの追加後、クラス名を「CWrapRow」に変更してください
'CWrapRow クラスモジュール
'[行の挿入]コマンドをカスタマイズ
Option Explicit
Public WithEvents Row As Office.CommandBarButton
Dim dcol As New Collection
'行挿入ラップ開始処理
Sub Initialize()
On Error GoTo inierr
Dim eve As New CWrapRow, ele
Dim i As Long
'Id=296 行(&R)、Id=3182 セル(&E)、Id=3183 挿入(&I)
For Each ele In Array(295, 296, 297, 3182, 3183, 3185)
Set eve.Row = Application.CommandBars.FindControl(ID:=ele)
dcol.Add eve
Set eve = Nothing '必須
Next
Exit Sub
inierr:
MsgBox i & " error"
End Sub
'行挿入ラップ終了処理
Sub Terminate()
Set dcol = Nothing
End Sub
'行挿入イベント(行挿入イベントに応答するカスタムコードを記述)
Private Sub Row_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MsgBox "行挿入 " & Selection.Address '確認用
'ここで行挿入前の処理
'
CancelDefault = True '行挿入をキャンセル
Selection.EntireRow.Insert '行挿入実行
'ここで行挿入後の処理
'
End Sub
|
|