Excel VBA質問箱 IV

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

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


3131 / 13644 ツリー ←次へ | 前へ→

【63990】別ブックのシートのイベントの捕捉 UO3 10/1/8(金) 16:56 質問[未読]
【63992】Re:別ブックのシートのイベントの捕捉 ichinose 10/1/8(金) 18:18 発言[未読]
【63994】Re:別ブックのシートのイベントの捕捉 UO3 10/1/9(土) 8:31 発言[未読]
【64038】【お礼と報告】別ブックのシートのイベント... UO3 10/1/12(火) 9:49 お礼[未読]

【63990】別ブックのシートのイベントの捕捉
質問  UO3  - 10/1/8(金) 16:56 -

引用なし
パスワード
   シートの動きを制御する仕組みを準備しています。
シートそのものにはモジュールをもたせず、ワークブックモジュール含めた
本体側(変な表現ですかね)でハンドリングするものは一応作ったのですが
システムのメンテナンスや運用を考えると、シートモジュールにロジックを
持つよりましとはいえ、データブックとプログラムブックは切り離して
おきたいという私のポリシー(?)もあって、なんとかプログラムブックから
別ブックのシートのイベントを捕捉できないかなぁと。
よいお知恵ありませんか。

【63992】Re:別ブックのシートのイベントの捕捉
発言  ichinose  - 10/1/8(金) 18:18 -

引用なし
パスワード
   UO3 さん、こんばんは。

>持つよりましとはいえ、データブックとプログラムブックは切り離して
>おきたいという私のポリシー(?)

こういう手法は、私も同感ですが、そうだとしたら、

>なんとかプログラムブックから
>別ブックのシートのイベントを捕捉できないかなぁと。
こんな仕様が必要なのかなあとも思いますが、きっと何かあるんでしょうねえ

ざっとですが、プログラムブック側のThidworkbook辺りに

'==============================================================
Option Explicit
Private WithEvents app As Application
Private Sub app_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  MsgBox Sh.Parent.Name & "---" & Sh.Name & "----" & Target.Address
End Sub
Sub set_app()
  Set app = Application
End Sub

このようにしておき、set_appを実行後は、すべてのブックのSheet_changeイベントが
拾えます。

もっと限定したいなら、
同じプログラムブック側のThidworkbookに

Option Explicit

Private WithEvents sht As Worksheet
Sub set_sht()
  Set sht = Workbooks("データブック.xls").Worksheets("sheet1")
End Sub

Private Sub sht_Change(ByVal Target As Range)
  MsgBox Target.Parent.Name & "---" & Target.Address
End Sub

set_shtを実行した後は、データブック.xlsのSheet1のイベントが取得できます。

こういう事ですか?

【63994】Re:別ブックのシートのイベントの捕捉
発言  UO3  - 10/1/9(土) 8:31 -

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

いつも的確なアドバイス、ありがとうございます。
VBAに関しては、ほんのよちよち歩きでして、Applicationレベルの
機能をほとんど習得しておらず、勉強になります。

週末、これから外出、3日間、PCの使えない環境になりますので
週明けに試し、結果を報告いたします。

データブックの下に(?)マクロロジックがくっついた形で多くの担当者の
資料が作成されていくわけで、そうすると、チェック仕様を変更した際の
メンテナンスが面倒になり、結果、様々なバージョンのロジックがついた
ブックが拡散していくことが気になりまして。
VBIDEを使ってメンテナンスする手法もあろうかと思いますが、まずは
申し上げたような形でなんとかできないかなぁと思った次第です。

【64038】【お礼と報告】別ブックのシートのイベン...
お礼  UO3  - 10/1/12(火) 9:49 -

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

 ●お礼

 ありがとうございました。

 久しぶりにPCが使える環境に復帰しまして、ロジックのフレームを作成し
 ご教示いただきましたコードを埋め込みましたところ、必要なタイミングで
 必要なイベントと必要な情報を取得できることを確認いたしました。
 とりあえず書きましたようにApplicationレベルの機能を知ったということも
 大収穫ですし、WithEventsはクラスモジュールでしか使えないと思い込んで
 いたのですがWorkBookモジュールでも使用可能だとわかり、世界が広がった
 感じです。これから、すでにデータブック側に同居させる形で作ってある
 ビジネスロジックを引っ越しさせたいと思います。

 ●報告

 ・プロシジャーset_appにつきWorkBookモジュール内(Openルーティン)で
  利用した後、標準モジュールからの利用に変えたところ、プロシジャーが
  見つからないエラーになりましたが、ThisWorkbook.set_appと指定することで
  問題なく動きました。
 ・おそらくは(他の要件もあり)ご教示いただいたコードをクラスモジュール
  において利用していくことになろうかと思います。

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