Excel VBA質問箱 IV

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

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


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

【64483】2007でマクロブックとDTブックの分離 pon 10/2/15(月) 0:51 質問[未読]
【64496】Re:2007でマクロブックとDTブックの分離 Jaka 10/2/15(月) 16:05 発言[未読]
【64507】Re:2007でマクロブックとDTブックの分離 UO3 10/2/16(火) 12:22 回答[未読]
【64508】Re:2007でマクロブックとDTブックの分離 pon 10/2/16(火) 17:47 質問[未読]
【64509】Re:2007でマクロブックとDTブックの分離 UO3 10/2/16(火) 18:26 回答[未読]
【64510】Re:2007でマクロブックとDTブックの分離 neptune 10/2/16(火) 18:57 発言[未読]
【64701】Re:2007でマクロブックとDTブックの分離 pon 10/3/9(火) 10:19 発言[未読]

【64483】2007でマクロブックとDTブックの分離
質問  pon  - 10/2/15(月) 0:51 -

引用なし
パスワード
   よろしくお願いいたします

調べているのですが理解が深まりません
曖昧な質問で申し訳ありませんがアドバイス頂けると助かります

マクロの分離は以前からしたいと思っていましたが
うまく出来ずにいました

今回考えている方法は
データブックとマクロブックをブックを分けるにあたり
当たり前ですが
データブックはマクロ無しとして
操作は、マクロブックにあるフォームから全て実行する

で、動作イメージは
マクロブックを開く時
マクロブックのフォームを開き
同時にデータブックを開く

あとは、開いたマクロブックの入力補助用フォームからDTブックを参照した
リストボックス等で入力対象DTブックのセルを選択させセル入力する
みたいな感じです


Q1
実際にマクロブック分離のブックはみたことが無いのでよくわかりませんが
こんなイメージでよいのでしょうか


Q2
マクロブックのフォームを閉じてしまった時再度フォーム開く方法として
マクロブックのメニューにフォームを開くメニューを追加すればいいと
思いますが2007で Menu.Controls.Add
すると、アドインタブに追加されてしまいます
出来ればカスタムメニューをクイックアクセスツールバーに追加したいと
思っていますが方法はありますか


Q3
自ブックにADOは不具合が出る を体験したことがあったのですが
今回は、他ブックなので、不具合に遭遇することは無いと考えて
よいでしょうか


Q4
操作対象のブック名指定だけで問題なく操作できそうな気がしていますが
どうでしょうか
(時折操作によってはAPIが必要な場合に遭遇することがありえそうですか?)


等なんとなく疑問に思っているのですが
こんなアプローチでいいか自身がありません
駄目 とか いけそう
だけでも、コメント頂けるとうれしいです


と、ここまで書いたら、
>マクロの分離は以前からしたいと思っていましたが
>うまく出来ずにいました

シートイベントとかブックイベントを使用することが多くて
マクロの分離をあきらめていたことに気が付きました

Private WithEvents app As Application
は、理解が足りていませんが
この辺まで考えておけば大丈夫でしょうか

他にも考えておいたほうがよいものとかありますか


よろしくお願いいたします

【64496】Re:2007でマクロブックとDTブックの分離
発言  Jaka  - 10/2/15(月) 16:05 -

引用なし
パスワード
   >Q1
>実際にマクロブック分離のブックはみたことが無いのでよくわかりませんが
>こんなイメージでよいのでしょうか
大体そんな感じが多いと思いますよ。
ユーザーにシートをさらせたくないって、人もいますけど、
私は、プロじゃないし、ちょっとしたメモを、セルに書き残しておきたいなどと思ったりするので、この辺は好き好きだと思ったりします。

Q2、Q3
2007持ってないし、やったことないのでわかりません。

Q4
シートを触らせたくない人は、APIは使っているみたいですね。
(フォームしか前面に見せたくないとか)


シートActivateイベントの場合、こんなんでいいのかな?

ThisWorkbook
Dim AppExcel As Class1
Private Sub Workbook_Open()
  Set AppExcel = New Class1
  Set AppExcel.App = Application
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set AppExcel = Nothing
End Sub

クラスモジュール
Public WithEvents App As Application
Private Sub App_SheetActivate(ByVal Sh As Object)
  MsgBox Sh.Name
End Sub

【64507】Re:2007でマクロブックとDTブックの分離
回答  UO3  - 10/2/16(火) 12:22 -

引用なし
パスワード
   ponさん

こんにちは。
私の書くアプリケーションは、すでにできている様々なデータブックを
集めてきてあれこれ分析するケースが多いものですから、基本は
自ブックは【たまたまエクセル】という感じです。なので、エクセル自体は
表示させず、ユーザフォーム一本やりですね。
そうすると、ユーザの操作で
>マクロブックのフォームを閉じてしまった時
がとても困りますので、ユーザフォームの右上のXマークを無効にしてます。

ただ、時折、作成した(自ブックではない)分析表を表示して、そこで
ユーザが何か書込みをする、そのイベントをキャッチしなきゃいけない
場合もあります。その場合、自ブックのWorkbookモジュールで
分析表のイベントをキャッチするようにしていますね。

あとは、どうしてもデータシートとマクロをセットにしなきゃいけない場合。
遠隔地の支店のパソコンがあまりわからない人にアンケート用紙を
配布して入力してもらうような場合、この場合でも、最低条件として
シートモジュールは作成しません。できあがったシートを別ブックに
取り込んで別資料として利用するユーザもいて、その場合、
シートモジュールがついていると、あとあと、面倒な問い合わせなんかが
あったりしますので。

>操作対象のブック名指定だけで問題なく操作できそうな気がしていますが
>どうでしょうか

そうですね。あとブックが入っているフォルダパスが必要になったりしますね。

>(時折操作によってはAPIが必要な場合に遭遇することがありえそうですか?)

ご質問の意味がよくわからないのですが、分離ブックであれ一体型ブックであれ
APIが必要な処理はAPIを使いますけど?

【64508】Re:2007でマクロブックとDTブックの分離
質問  pon  - 10/2/16(火) 17:47 -

引用なし
パスワード
   Jakaさん

ありがとうございます


>大体そんな感じが多いと思いますよ。
助かります

>ユーザーにシートをさらせたくないって、人もいますけど、
>私は、プロじゃないし、ちょっとしたメモを、セルに書き残しておきたいなどと思ったりするので、この>辺は好き好きだと思ったりします。
勉強になります
ケースバイケースで考えてみたいと思います


>出来ればカスタムメニューをクイックアクセスツールバーに追加したいと
思っていますが方法はありますか
こちらは、別途もう少し調べてみます

>>Q3
>>自ブックにADOは不具合が出る を体験したことがあったのですが

自ブックにADOは不具合 

2003で実際に遭遇したとき、掲示板でアドバイス頂いたのですが
その詳細はわかりませんでした

他ブックで問題なく自ブックで問題ありがどうしても理解できませんでしたがその後
[BUG]: ActiveX データ オブジェクト (ADO) を使用して、開いている Excel ワークシートをクエリすると、メモリ リークが発生します。
tp://support.microsoft.com/kb/319998/ja
が、原因 みたいな書き込みを見かけました

ウウ・・・リスト表示する処理が複雑そうなので、他ブックADOでこれっきゃないがきっかけだった・・・
自ブックというよりも開いている・・・ なんですかね・・・・
他見かけた掲示板では、自ブックでADOは不具合 は見かけましたが
他ブックで不具合は、見かけたことが無いというか、他ブックで操作しましょうみたいなでした

何か、コメント等ありましたらよろしくお願いいたします


>Q4
>シートを触らせたくない人は、APIは使っているみたいですね。
>(フォームしか前面に見せたくないとか)
イメージが湧きます
ありがとうございました


>シートActivateイベントの場合、こんなんでいいのかな?
コードのご提示ありがとうございました
クラスモジュールもう少し知らべてみたいと思います


UO3さん

ありがとうございます

マクロブックの運用紹介ありがとうございます
イメージが湧きました

>>マクロブックのフォームを閉じてしまった時
>がとても困りますので、ユーザフォームの右上のXマークを無効にしてます。
ですよね ウンウン
ただ、シート全体を見渡すとき、無いほうがみやすいかな
で、フォーム再表示が欲しいなと思いました


>ただ、時折、作成した(自ブックではない)分析表を表示して、そこで
>ユーザが何か書込みをする、そのイベントをキャッチしなきゃいけない
>場合もあります。その場合、自ブックのWorkbookモジュールで
>分析表のイベントをキャッチするようにしていますね。

>シートモジュールは作成しません。できあがったシートを別ブックに
なるほどです

>ご質問の意味がよくわからないのですが、分離ブックであれ一体型ブックであれ
>APIが必要な処理はAPIを使いますけど?
漠然とした質問で申し訳ありませんでした

具体的にどんな場合だったか思い出せないのですが
過去何度かAPIでブック操作しなければならない場面があって
掲示板で、ご教授頂いたことがありました
理解が乏しく、自分では対応できなさそうな気もしています


イメージはつかめたつもりなのですが

普通よく利用するマクロ組み込みブックは
入力補助用で別ファイルのデータを表示する
入力データを加工したり、別ブックを作る
ユーザー関数使用する
フォームを使用する
上記操作をメニュー登録したり右クリックメニューで実行する
見たいな事が多く
必ずしも、フォーム上からだけの操作がメインでは無い
というか
ブック固有のマクロが多いので
>>シートイベントとかブックイベントを使用することが多くて
>>マクロの分離をあきらめていたことに気が付きました
みたいな状況でした


マクロの分離をしておかないと、仕様変更時等苦労するとかは
実際に体験していますが
極端な考えでは
対象ブックのイベント取得したマクロ処理みたいなマクロブック
というのも有りかと
そうすると、コード的には、倍ぐらいの量になってしまうのでしょうか
それとも
関数化で使い回しが可能で大差ない作業量なのでしょうか


データブックとマクロブックは分けるべきだとアドバイスを見ることは
多々あるのですが、上記ようなの場合でもやはり分けるのでしょうか


ちなみに
部内他部署含めて、作成したブックは使用してもらっています

マクロブックの分離をしたほうがいいような気もしていたのですが
作業量が大量に増えるようであれば
ケースバイケースというか分離しないほうが多そうな気もします


アドバイスあればよろしくお願いいたします

【64509】Re:2007でマクロブックとDTブックの分離
回答  UO3  - 10/2/16(火) 18:26 -

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

>シート全体を見渡すとき、無いほうがみやすいかな
>で、フォーム再表示が欲しいなと思いました

WindowsAPIでユーザフォームの右上に通常のウィンドウアプリのような
最大化、最小化、通常のボタンを配置して邪魔な場合はデスクトップ
の左下に小さくしまいこむようにしてます。 

>対象ブックのイベント取得したマクロ処理みたいなマクロブック
>というのも有りかと
>そうすると、コード的には、倍ぐらいの量になってしまうのでしょうか
>それとも

データブックのシートイベントで捕捉できる動きは、マクロブック側の
WorkbookモジュールでWithEventsを書くことで、(きっと)全て捕捉
できます。コードはSheetモジュールに書くものと基本的に同じです。
偉そうに書いてますが、これは、この掲示板でichinoseさんに教えて
もらったんです。
ht p://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=63990;id=excel

【64510】Re:2007でマクロブックとDTブックの分離
発言  neptune  - 10/2/16(火) 18:57 -

引用なし
パスワード
   ▼pon さん:
こんにちは

ADOの方ですが、
ht tp://support.microsoft.com/kb/319998/ja
で英語の方を読むと、どうも別BookにしてそのBookをExcelで開かないで
やると大丈夫見たいですね。
・・・私には英語力がないのでご自身でも確認して下さいね。

別案ですが、アドバンストフィルターは使えないんですか?
これも早いですよ。

>アドバイスあればよろしくお願いいたします
よく読んでませんが、
・特定機能専用ツールとして、マクロ専用ExcelBookを使用する。
・AddInとして作成、使用する。
と管理が楽チンと思います。

【64701】Re:2007でマクロブックとDTブックの分離
発言  pon  - 10/3/9(火) 10:19 -

引用なし
パスワード
   UO3 さん
neptune さん

お礼が大変送れて申し訳ありません

頂いたアドバイスでなんとなくイメージはつかめたので
ちょっとしたテストとかはしてみたのですが、いまいち理解に自信がありません
他に
データブック側の
 マスタブック
 明細DTブック
の仕組み作りが暗礁に乗り上げていて手が遠のいています

お礼をしなくてはいけないと思いながら遅れて申し訳ありませんでした

勝手なお願いで申し訳ないのですが
データブック側の作りこみがもう少し進んだら
再度、続けての質問をしたく思っています

ちょっと次の書き込みがいつになるのか予定がつきませんが
このまま開けさせておいて頂ければと思っています
よろしくお願いいたします


不具合あれば
いったん閉じるつもりです


よろしくお願いいたします

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