Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4775 / 13646 ツリー ←次へ | 前へ→

【54444】行や列の挿入後の処理 JuJu 08/3/13(木) 12:09 質問[未読]
【54465】Re:行や列の挿入後の処理 ぽむじぃ 08/3/14(金) 10:55 回答[未読]
【54467】Re:行や列の挿入後の処理 VBWASURETA 08/3/14(金) 11:12 回答[未読]
【54468】Re:行や列の挿入後の処理 Jaka 08/3/14(金) 11:15 発言[未読]
【54470】Re:行や列の挿入後の処理 VBWASURETA 08/3/14(金) 11:24 発言[未読]
【54471】Re:行や列の挿入後の処理 Jaka 08/3/14(金) 12:39 発言[未読]
【54472】Re:行や列の挿入後の処理 VBWASURETA 08/3/14(金) 13:02 発言[未読]
【54473】Re:行や列の挿入後の処理 VBWASURETA 08/3/14(金) 15:00 発言[未読]
【54475】Re:行や列の挿入後の処理 ハチ 08/3/14(金) 16:11 発言[未読]
【54481】Re:行や列の挿入後の処理 ハチ 08/3/14(金) 19:22 発言[未読]
【54533】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 12:01 発言[未読]
【54534】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 13:13 回答[未読]
【54535】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 13:41 発言[未読]
【54536】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 13:50 発言[未読]
【54542】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 15:15 発言[未読]
【54544】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 15:57 回答[未読]
【54482】Re:行や列の挿入後の処理 JuJu 08/3/14(金) 22:25 発言[未読]
【54483】Re:行や列の挿入後の処理 VBWASURETA 08/3/14(金) 23:44 発言[未読]
【54530】Re:行や列の挿入後の処理 ハチ 08/3/17(月) 10:17 発言[未読]
【54545】Re:行や列の挿入後の処理 VBWASURETA 08/3/17(月) 18:22 発言[未読]
【54549】Re:行や列の挿入後の処理 VBWASURETA 08/3/18(火) 11:55 発言[未読]

【54444】行や列の挿入後の処理
質問  JuJu  - 08/3/13(木) 12:09 -

引用なし
パスワード
   行挿入した時に、自動的に表のNo.(1,2,3,…)をrenumberする方法はありませんか?

行挿入イベントがあればそこで処理してしまえば良いのですが、該当イベントは見つける事ができませんでした。


今思いついている方法です、

 1. 表のNo.のエリアに名前(No)を定義してする
 2. 表のNo.はワークシート関数(ROW等)を使って表示する
 3. 数式で参照されているセルに行挿入するとCalculateイベントが発生するので、
   イベント内で挿入行を検索し数式を書き込む

Private Const FORMULA_TABLE_NO = "=ROW(RC)-ROW(No)+1"
Private WithEvents TargetWorksheet As Worksheet

Private Sub TargetWorksheet_Calculate()
  With TargetWorksheet
    If Not .Range("No").Find("") Is Nothing Then
      .Range("No").FormulaR1C1 = FORMULA_TABLE_NO
    End If
  End With
End Sub

を検討中ですが、できれば数式を使わずに処理できないかと考えています。

【54465】Re:行や列の挿入後の処理
回答  ぽむじぃ  - 08/3/14(金) 10:55 -

引用なし
パスワード
   言っている意味が、よく解らない。
=row()
だけでいいんじゃないの?

【54467】Re:行や列の挿入後の処理
回答  VBWASURETA  - 08/3/14(金) 11:12 -

引用なし
パスワード
   ▼JuJu さん:
おはようございます。

>行挿入した時に、自動的に表のNo.(1,2,3,…)をrenumberする方法はありませんか?
オートフィルを使えば良いのでは?
マクロにしたいのでしたら自動記録で確認できます。

>行挿入イベントがあればそこで処理してしまえば良いのですが、該当イベントは見つける事ができませんでした。
シートオブジェクトにあるイベントでできると思いますが。
Changeイベント、Selectイベント等

例えば、指定範囲の条件で、その行の該当セルにあるべき関数
なければ追加すれば良いと思いますよ。

後、連番はMAX関数でも出来ます。
=Max(範囲)+1

【54468】Re:行や列の挿入後の処理
発言  Jaka  - 08/3/14(金) 11:15 -

引用なし
パスワード
   ▼JuJu さん:
こんにちは。
お久しぶりです。

私が知っている方法も同じセルに=Now()書き込んでおいて、
Calculateイベント利用する方法です。
関数が入ったセルが消されたら都度書き込む所も同じです。

うまい方法が見つかれば良いですね。

下に埋もれそうなので上に上げる
いけない行為....。

【54470】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/14(金) 11:24 -

引用なし
パスワード
   ▼Jaka さん:
>下に埋もれそうなので上に上げる
>いけない行為....。

すみません、質問で過去にあるよって意味で1つ上げてしまいました。
結構、検索の仕方がわからない方が多いようですので^^;

【54471】Re:行や列の挿入後の処理
発言  Jaka  - 08/3/14(金) 12:39 -

引用なし
パスワード
   ▼VBWASURETA さん:
>結構、検索の仕方がわからない方が多いようですので^^;
何年か前の常連回答者さんです。
私とは比べ物にならないくらいの知識の持ち主です。

ちょっと違うので修正。
>下に埋もれそうなので上に上げる
>いけない行為....。
これは、返信が着いていないと思っていたので、私が上に上げる事をしたんです。
書き込んだ後に返信がついていたので、私以外の方に対してではありません。
私自身の行為に対してです。

【54472】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/14(金) 13:02 -

引用なし
パスワード
   ▼Jaka さん:
>何年か前の常連回答者さんです。
>私とは比べ物にならないくらいの知識の持ち主です。
ちょっと過去の見ました。
確かに回答側の方で、色々知識持っておられるようなのに
どいう事?と思うような質問なのですが^^;
イベントがなければ組み合わせてかして
連番を振るしかないと思うんですけどね。
条件書式とかってシートオブジェクトで取れたら何とか
行けるのかな?程度ですね。


>>下に埋もれそうなので上に上げる
>>いけない行為....。
>これは、私が上に上げた、自分の行為に対してです。
>久しぶりなのに返答が無いままなのはなんか....。
その方なのでしょうかね?
たまたま同じHNとかある場合ありますし。

【54473】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/14(金) 15:00 -

引用なし
パスワード
   ちょっと追記です。

厳しい書き方かも知れませんがすみません。
jakaさんから回答側の方と聞きましたので、記載致します。
HNが同じだけで別の方かも知れませんが・・・

まず、ぱっと見に重要性が全然見えません。
連番にこだわる理由があるのでしょうか?
連番だけでそんなに時間をかけてするものでもないでしょうし。
あるのでしたら書かないとそんなに重要じゃないと思われて、
シート関数で対応するのでも良いのではと思われるかもしれません。

次にイベントがなかったというのは何か調べられてでしょうか?
Procをフックするなり見られましたか?

次に環境は書いた方が良いです。基本ですよね。

最後に何を質問したいのか曖昧になっていると言いますか
聞きたい部分がどの部分なのかわかりません。

失礼な書き方ですが、ちょっとわかりにくいものでしたから
書かせて頂きました。

【54475】Re:行や列の挿入後の処理
発言  ハチ  - 08/3/14(金) 16:11 -

引用なし
パスワード
   ▼VBWASURETA さん:

横から失礼します。
たぶん、JuJuさんが質問されているのは、
「行の挿入を検知できるか?」ということだと思います。
連番を振るところは、おまけです。

実際やってみるとわかると思いますが、かなり難しいです。
再計算のイベントを検知する以外の方法で、
なにか案がありますか?

【54481】Re:行や列の挿入後の処理
発言  ハチ  - 08/3/14(金) 19:22 -

引用なし
パスワード
   ▼JuJu さん:

>できれば数式を使わずに処理できないかと考えています。

番号部分に数式を使いたくない。 と拡大解釈して書きましたが、
大差ないですね・・・・

A1セルを作業セルとして使用します。

Option Explicit

Private Cnt As Long

Private Sub Worksheet_Activate()
  With Range("A1")
    .Formula = "=ROWS(No)"
    Cnt = .Value
  End With
End Sub

Private Sub Worksheet_Calculate()
  If Range("A1").Value = Cnt Then Exit Sub
  
  With Range("No")
    .Cells(1, 1).Value = 1
    .Cells(1, 1).AutoFill Destination:=Range("No"), Type:=xlFillSeries
  End With
  Cnt = Range("A1").Value
End Sub

【54482】Re:行や列の挿入後の処理
発言  JuJu  - 08/3/14(金) 22:25 -

引用なし
パスワード
   ▼VBWASURETA さん:
>>行挿入イベントがあればそこで処理してしまえば良いのですが、該当イベントは見つける事ができませんでした。
>シートオブジェクトにあるイベントでできると思いますが。
>Changeイベント、Selectイベント等

行列挿入時Changeイベントが発生しないのはExcel全般の仕様だと思っていたのですが、2003と2007ではChangeイベントが発生するようですね。
調査不足で申し訳ないです。

>まず、ぱっと見に重要性が全然見えません。
>連番にこだわる理由があるのでしょうか?
>連番だけでそんなに時間をかけてするものでもないでしょうし。

マクロの実行時間より、連番が常にあっていることが重要な作業なのです。
運用で逃げれたら良いのですが。


▼Jaka さん:
>Calculateイベント利用する方法です。
>関数が入ったセルが消されたら都度書き込む所も同じです。

やっぱりCalculateイベントですか。
イベントの動作はバージョン依存しないと思い込んでいたので、Changeイベントのこともあるしテストが大変そうです。あまりバージョン分けのコードは書きたくなかったのですが、Excel97と2000依存コードの悪夢が再び...


▼ハチ さん:
>たぶん、JuJuさんが質問されているのは、
>「行の挿入を検知できるか?」ということだと思います。
>連番を振るところは、おまけです。

しかも数式使用不可というなんだかよくわからないソフトを作っています。

>再計算のイベントを検知する以外の方法で、
>なにか案がありますか?

2000だと再計算イベントが有力のようですね。


仕様で保存したブックに数式は使えないので、

 1. ファイルを開いたときに、所定のセルを数式に置き換える。
   (行列挿入時に値が変化する式がないとCalculateイベントが発生しないため)
 2. 行列挿入時の処理はCalculateイベントを使う。
 3. 保存するときに数式を値に戻す。

という処理になりそうです。

Excel97,2000を対応から外して良いか検討してみます。
97ユーザはほとんどいませんが2000ユーザは根強く残っているので、難しそうです。

【54483】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/14(金) 23:44 -

引用なし
パスワード
   ▼JuJu さん、jakaさん、ハチさん:
こんばんは。

ハチさん
> たぶん、JuJuさんが質問されているのは、
>「行の挿入を検知できるか?」ということだと思います。

jujuさんも書いてますがバージョンによって動きが結構違う場合があるんですよ。
以前にあるシステムのイベント動作検証をしてまして、バージョンによる違い
を洗い出しで一苦労したことがあるんでです。
で、回答側の人でしたら何を質問したいのか、必要な情報は何か
必要性について書こうと思えばかけると思って書きました。
質問者側にも質問する見本にもなりますから。
余談ですが、OSでも違う場合があります。
Vistaの描画イベントと、XPの描画イベントの発生条件が違います。


> 実際やってみるとわかると思いますが、かなり難しいです。
> 再計算のイベントを検知する以外の方法で、
> なにか案がありますか?

前にも書きましたが、行挿入時にProcでどいうメッセージやりとりが
あるかフックしてパラメータコードから追いかけるしかないかなっと思いますが
他に追いかける方法がありますか?

後、簡単にはRow関数で開始位置と終了位置から割り出すのが
簡単な方法かなっと思いますが処理が重くなりそうですかね?
複数行挿入された場合(事前にSelectイベントで選択された行数を保持しつつ)
の対応としてはこうなるのかなっとしか今は思いつきません。


jujuさん

> 行列挿入時Changeイベントが発生しないのはExcel全般の仕様だと思っていたのですが、2003と2007ではChangeイベントが発生するようですね。
> 調査不足で申し訳ないです。

いえいえ、実際やってみてからわかることが結構ありますけどね。
行挿入も選択範囲でどれだけ範囲されるかなんてわかりませんから
挿入方法も行で選択されているかセルの列セル範囲で挿入される等
色々パターンがあるので、簡単に指定範囲だけの対応としてイベントを
組み合わせて対応することが多いです。
特に検証用のシートとかだとあまりこらないですぐに作成ができるような
ものとして必要とされる場合が多いですからそのあたりは、そんな感じに
なってしまってます。お役に立てなくてすみません。

> マクロの実行時間より、連番が常にあっていることが重要な作業なのです。
> 運用で逃げれたら良いのですが。

それは例えば、ソート用とかに常に正しくないとソート順序が正しくない
並びになるとかそいうこととかでしょうか?

【54530】Re:行や列の挿入後の処理
発言  ハチ  - 08/3/17(月) 10:17 -

引用なし
パスワード
   ▼VBWASURETA さん:
書き込みの意図を読み違えてました。失礼しました。

>前にも書きましたが、行挿入時にProcでどいうメッセージやりとりが
>あるかフックしてパラメータコードから追いかけるしかないかなっと思いますが
>他に追いかける方法がありますか?

自分はAPIは、相変わらずわかりません。
なので、再計算のイベントを使うしかないかなぁ と思っています。

.Formula = "=ROWS(No)"
であれば、データのあるシートではなく
別シートのイベントで処理することができるようになると思います。
擬似イベント発生用にWorkSheetを1枚追加すれば、
Excel2000でも対応できるかな。と考えてました。

【54533】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/17(月) 12:01 -

引用なし
パスワード
   みなさんおはようございます。

ちょっと調べていないので何とも言えないですが。
「元に戻す」「やり直す」の動きをイベントとして
取得できないものかなっと思ったんですが。
あれってユーザ操作したものを取得しているようなので
取れればいけそうなのですが無理でしょうか?

【54534】Re:行や列の挿入後の処理
回答  VBWASURETA  - 08/3/17(月) 13:13 -

引用なし
パスワード
   ▼VBWASURETA さん:
ちょっと行追加のイベント見つけました。
ただ残念なのは右クリックメニューには対応していないようです。

'********** シートオブジェクトモジュール **************
Private Sub Worksheet_Activate()
  Call testWrapRowOn 'トラップ開始
End Sub

'********** 標準モジュール **************
'標準モジュール
Option Explicit
Dim drow As CWrapRow

'行挿入コマンドのラップ開始
Function testWrapRowOn()
 Set drow = New CWrapRow
 drow.Initialize
End Function
'行挿入コマンドのラップ終了
Function testWrapRowOff()
 drow.Terminate
 Set drow = Nothing
End Function

'********** クラスモジュール **************
'クラス追加してクラス名を「CWrapRow」して下さい
'CWrapRow クラスモジュール
'[行の挿入]コマンドをカスタマイズ
Option Explicit
Public WithEvents Row As Office.CommandBarButton
Dim dcol As New Collection

'行挿入ラップ開始処理
Sub Initialize()
 Dim eve As New CWrapRow, ele
 'Id=296 行(&R)、Id=3182 セル(&E)、Id=3183 挿入(&I)
 For Each ele In Array(296, 3182, 3183)
  Set eve.Row = Application.CommandBars.FindControl(ID:=ele)
  dcol.Add eve
  Set eve = Nothing '必須
 Next
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

【54535】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/17(月) 13:41 -

引用なし
パスワード
   補足です。

>ただ残念なのは右クリックメニューには対応していないようです。

ですが、行選択時の右クリック挿入は対応してます。
セル単位で右クリック⇒挿入⇒行全体に対しては未対応ということです。
idさえわかれば追加できそうなのですけどね・・・

【54536】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/17(月) 13:50 -

引用なし
パスワード
   訂正です。


>  Call testWrapRowOn 'トラップ開始

このコメントで、「ラップ開始」です^^;
トラップって・・・

【54542】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/17(月) 15:15 -

引用なし
パスワード
   一応制御?という感じになったので記載します。

セル単体の右クリックの制御ですが、idを追いかけて
一応制御しました^^;

と言いますのは本来セル単体選択⇒右クリック⇒挿入⇒行全体挿入ですが
セル単体選択⇒右クリック⇒そのまま行挿入になってしまいました・・・
一応挿入イベントは拾えるので、ソースを提示します。

> For Each ele In Array(296, 3182, 3183)



 For Each ele In Array(295, 296, 297, 3182, 3183, 3185)

にしていただければ拾えます。

【54544】Re:行や列の挿入後の処理
回答  VBWASURETA  - 08/3/17(月) 15:57 -

引用なし
パスワード
   修正と全体ソースです。気づかれた方もいらっしゃると思いますが
インスタンスが生成されて増えていくソースでしたので
インスタンスを消す処理と初期時の処理も入れました。


'******** シートオブジェクトモジュール *******
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

【54545】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/17(月) 18:22 -

引用なし
パスワード
   ▼ハチ さん:
>書き込みの意図を読み違えてました。失礼しました。

あ、そうなんですね。
自分が間違えているのかなっと質問してしまいました^^;


>自分はAPIは、相変わらずわかりません。
>なので、再計算のイベントを使うしかないかなぁ と思っています。

一応調べてみて挿入イベントはクラス定義で拾えるみたいです。
ただ正しいIDが拾えていないみたいで一部動きが変です・・・
提示したソースはメニューリソースIDから追いかける方法だと思いますが
Excelでクラス使ったのは初めてですし。
JavaとかCの使い方と同じかなっと挑戦して失敗してしまいました・・・
難しいです。

>.Formula = "=ROWS(No)"
>であれば、データのあるシートではなく
>別シートのイベントで処理することができるようになると思います。
>擬似イベント発生用にWorkSheetを1枚追加すれば、
>Excel2000でも対応できるかな。と考えてました。

そうなると簡単に出来るほうが良いかも知れませんね。

【54549】Re:行や列の挿入後の処理
発言  VBWASURETA  - 08/3/18(火) 11:55 -

引用なし
パスワード
   みなさんおはようございます。

とりあえず昨日作りましたサンプルで、
問題がまだありそうでしたので再度アップします。
いらなさそうですけど・・・

問題は、どうもインスタンス管理が適当になっていて、
正しく作られない場合がありました。
シート切り替えるタイミングで挿入イベントが発生しない等

後、必要に応じて作るインスタンスにしたので
シート切り替えでインスタンスを消したり作ったりしないようにしました。

クラスモジュールについてやっているうちに理解不能な動きになってたので
とことん作ってみたくなりました^^;


'*** シートモジュール ***
Option Explicit
Dim drow As CWrapRow

'行挿入コマンドのラップ開始
Private Sub testWrapRowOn()
 '既にインスタンスが生成されている場合は作らない
 If drow Is Nothing Then
  Set drow = GetObjEvent(Me.Name)
  drow.Initialize
 End If
End Sub

'行挿入コマンドのラップ終了
Private Sub testWrapRowOff()
 If drow Is Nothing Then
  Exit Sub
 End If
 drow.Terminate
 Set drow = Nothing
End Sub

'内部関数呼び出し用(生成)
Function setSheet()
  Call testWrapRowOn
End Function

'内部関数呼び出し用(破棄)
Function DisPose()
  Call testWrapRowOff
End Function


'*** 標準モジュール ***

Sub Auto_Open()
  '必要に応じてどのシートに生成するかになります。
  '後、該当のシートに上記シートモジュールを事前に追加する必要があります。
  Worksheets("Sheet1").setSheet
  Worksheets("Sheet2").setSheet
End Sub

Sub Auto_Close()
  '必要に応じてどのシートのイベントを解放するかになります。
  '後、該当のシートに上記シートモジュールを事前に追加する必要があります。
  Worksheets("Sheet1").DisPose
  Worksheets("Sheet2").setSheet
End Sub

'CWrapRowクラスコンストラクタ引数
Function GetObjEvent(strName As String) As CWrapRow
  Dim obj As CWrapRow
  
  Set obj = New CWrapRow
  Set GetObjEvent = obj
  Call GetObjEvent.SetName(strName)
    
  Set obj = Nothing
End Function


'*** CWrapRow クラスモジュール ***
Option Explicit
Public WithEvents Row As Office.CommandBarButton
Dim dcol As New Collection
Public m_SheetName As String

'コンストラクタ(必要に応じて使用してください)
Private Sub Class_Initialize()
End Sub

'行挿入ラップ開始処理
Sub Initialize()
 Dim eve As New CWrapRow, ele

 'Id=296 行(&R)、Id=297 列(&C)、Id=3181 挿入(&I)...、Id=3182 セル(&E)、Id=3183 挿入(&I)
 For Each ele In Array(296, 297, 3181, 3182, 3183, 3185)
  Set eve.Row = Application.CommandBars.FindControl(ID:=ele)
  Call eve.SetName(m_SheetName) 'イベント毎にインスタンスがあるため随時シート名をセット
  dcol.Add eve
  Set eve = Nothing '必須
 Next
End Sub

'シート名取得プロパティ
Function GetName() As String
  GetName = m_SheetName
End Function

'シート名設定プロパティ
Function SetName(strName As String)
  m_SheetName = strName
End Function

'行挿入ラップ終了処理
Sub Terminate()
 'インスタンスを生成したシートと一致しない場合は解放しない
 If ActiveSheet.Name <> GetName() Then Exit Sub
 Set dcol = Nothing
End Sub

'行挿入イベント(行挿入イベントに応答するカスタムコードを記述)
Private Sub Row_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 'インスタンスを生成したシートと一致しない場合はイベントを発生させない
 If ActiveSheet.Name <> GetName() Then Exit Sub

 MsgBox "行挿入 " & Selection.Address '確認用
 'ここで行挿入前の処理
 '
 CancelDefault = True '行挿入をキャンセル
 Selection.EntireRow.Insert '行挿入実行
 'ここで行挿入後の処理
 '
End Sub

4775 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free