14歳の自分に衝撃の事実を告げてください

現在、あるExcelプログラムの修正を行っております。

プログラム内にはセル内のテキストの変化をトリガーとして動作するマクロが標準モジュールに記述されてあるのですが、そのマクロを動作させるための記述が見当たりませんでした。

通常であれば、上記のような動作をさせる場合

Private Sub Worksheet_Change(ByVal Target As Range)
目的の動作(マクロ)
End Sub

を使用して実現すると思っているのですが、その記述はありませんでした。
また、それ以外の方法を自分なりに調べてみたのですが発見できませんでした。

私の知識不足で申し訳ないのですが、上記の方法以外にセルのテキストチェンジをトリガーとしてマクロを動作させる方法をご存知の方がおられましたら、ご教授の程宜しくお願い致します。

基本情報を記載します。
ファイル形式:xls
Excelバージョン:Excel2010
OS :Windows 7 Professional

A 回答 (2件)

こんにちは。



>セルのテキストチェンジをトリガーとしてマクロを動作させる方法

クラスモジュールは、そのブックだけとは限らないです。
別の所にあっても、目的のイベントは働きますね。(それではウィルスもどきです(^^;)

アドインでも可能ですが、COMアドインの方は、それが出来たかは知りません。
COMアドインは、新しいテクニックは知りませんから。

他にも、一般的には ThisWorkbook モジュールが一番濃厚です。

それ以外に、古いテクニックですが、標準モジュールに、Ver.5 辺りのVBAの方法で、"OnEntry" メソッドがありますが、今、Excel2010で試してみましたら、まだ生きているようですね。
しかし、Helpには出てきませんでした。
    • good
    • 0
この回答へのお礼

>WindFaller様

早速の回答ありがとうございます。

標準モジュールを再度確認した結果、OnEntryメソッドによって実現されている機能であることが分かり、無事悩みが解決できました。以下のようなサンプルプログラムを作成し動作も確認できました。ご教授いただき、ありがとうございます。

調べてみると、もともとのプログラムが2001年に作成されたものだったのでOnEntryが使用されていたのではないかと思っています。

サンプル:
Sub Auto_Open()
TrapEntry
End Sub

Sub TrapEntry()
ActiveWorkbook.Worksheets("Sheet1").OnEntry = "movecells"
End Sub

Sub movecells()
If ActiveCell.Address() = "$C$2" Then
Range("G1").Select
Exit Sub
End If
End Sub

お礼日時:2014/11/26 11:50

シートモジュールの中やクラスモジュールの中は見たのでしょうか?

この回答への補足

>f272様

早速返答いただきましてありがとうございます。

シートモジュール、クラスモジュールの中も確認しました。
クラスモジュールにはプログラムはありませんでしたが、シートモジュールには以下の中身のないプログラムが記載されています。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

動作の補足として、デバッグで確認した動きを以下に記載します。
(1)セルに値(数値)を入力してEnter
(2)標準モジュール内のプログラムが動作(特定のセルがActiveの場合、別のセルをActiveにする)
(3)上記のシートモジュールが動作

※試しにマクロの記録を行って確認しましたが、上記の動作と同じでした。

私としてはEnter押した直後に標準モジュールのプログラムが動作していることが分からない状態です。
宜しくお願い致します。

補足日時:2014/11/26 08:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報