アプリ版:「スタンプのみでお礼する」機能のリリースについて

*.jpgファイルの撮影日時を、自作プログラムに読み込む必要に迫られ、いろいろお尋ねしました。
その結論は、ユーザー定義関数を自作して利用する、でした。
その時ご紹介頂いたのが、WEB公開のJpegExifクラスのCodeの利用でした。
その際、もっと端的に、システム内臓の、ADODB.Streamや、WIA.ImageFileを使って、
撮影日時を読み出す方法も教えて頂きました。

今回は、自前のCodeで撮影日時を読み出す事が目標でしたので、現在は、標準モジュールに、
JpegExifクラスの簡易版を置いて、自作プログラムを動かしています。

この際の試行錯誤の過程で、この簡易撮影日時読み出しFunctionを、クラスモジュールに置いたり、
標準モシュールに置いたり、いろいろテストしました。
両方の機能は同じで、使い勝手は標準モジュールに置いた方でした。

規模の大きいシステムで、クラスモジュールを使いこなされている方々にお伺いしたいのですが、
特定のFunctionを、クラスモジュールに置くか標準モジュールに置くかの判断の分岐点は何でしょうか?

A 回答 (2件)

昨日に書いた内容は、間違っていました。

申し訳ありません。

『ブック間をまたぐようなものに関しては、その利便性は発揮しますが、……』
実際にこちらでユーザー定義関数を作ってやってみました。実際にやるのは、たぶん、二度目ぐらいで、うっすらと記憶のある程度でした。

私の言葉の説明よりも絵をみていただければよいのですが、
http://yamav102.cocolog-nifty.com/blog/2013/07/v …

Class のプロパティのInstancing を 「PublicNotCreateable」にして、相手のブックで、参照設定して、Classから呼び出すと、簡単に説明するとそうなるのですが、

昨日から、いろいろ検証してみたのですが、クラス・オブジェクトは、Public にすれば、Projects 間で簡単に融通が利くと思っていたのです。ところが、これでは、手数が多すぎます。これしかないのなら、やむを得ずおすすめしますが、アドインとして呼び出したほうが楽に扱えます。

ご質問者さんのは、ユーザー定義関数のスタイルですから、クラスを辞めて、標準モジュールに戻した後、ファイルをアドイン型(.xlam)で保存します。そして、アドインで呼び出した方が早いことが分かりました。

>VBAで、Functionを、クラスモジュールに置くか? 標準モジュールに置くか? 
結果としては、標準モジュールの方が良いということになりました。

なお、違うブックで、モジュールを共用して呼び出すなら、アドインにする必要もなく、VBEditor 内の相手のブック側で参照設定をすればよいです。
    • good
    • 0
この回答へのお礼

WindFallerさん、こんにちは!
再度、いろいろなTESTまでして、詳細なコメント送って頂き、
本当に有難う御座いました。

私のレベルでは、特定なFunction (ユーザー定義関数)は、
Codeの切り分けが目的であれば、クラスを使わずに、
追加の標準モジュールに置けば良いらしいと理解できました。

また、ご紹介頂いたアドインの手法は、初めて対峙する概念で、
少しお時間を頂いて解読にチャレンジしてみます。
今回は、有難う御座いました。

お礼日時:2017/06/28 14:27

こんにちは。



>クラスモジュールに置くか標準モジュールに置くかの判断の分岐点は何でしょうか?

ブック間をまたぐようなものに関しては、その利便性は発揮しますが、1つのブックに属している限りは、それほど変わりはありません。

時々、VB6に馴染んだ人が、VBAでクラスでユーザー定義関数を作っているのを見かけます。

本来、クラスは、主に、Office の場合は、インスタンスを生成することが多いわけです。クラスそのものは、オブジェクトです。オブジェクトの中に、プロパティに該当するユーザー定義関数とメソッドに該当するプロシージャとを用意させます。クラスである以上、そしてメモリ上に置いている限りは、どこでも、そのオブジェクトと共に、設定された機能を呼び出せます。新たなコードを作らなくてもクラスから機能を呼び出せるので良いのではないかと思います。それは、ブックを指定すれば標準モジュールに書いても同じだと言えば、そのとおりです。

ところが最近、Githubを中心にしたExcel VBAによるクラスを使ったコードを見かけることがあるのですが、正直な話、私にはよくわからないことが多いのです。偶然にも、私は、同じようなコードを書いてはいたものの、そちらのクラスを使ったものは、俯瞰的にみることが出来ず、そのコードの断片しか見られないのです。書いている人間はよく分かっているだろうけれども、途中からではさっぱり分かりません。実力がないからと批判されるかもしれませんが、はたして、Excel VBAというもの、そしてクラスというものは、そういうものだったのか、と首をかしげてしまいます。

参考:
http://thom.hateblo.jp/entry/2015/10/01/202952
    • good
    • 1
この回答へのお礼

WindFallerさん、こんばんは。
初めてVBA_Classと対面した初心者の、要領を得ないお尋ねに、
コメントをお寄せて頂き、有難う御座いました。

要点は、一つのクラス_Object(インスタンス)を、
多数のBook「VBA Project(book1)、---」で参照すれば、
クラスの有難味が分かると理解させて頂きました。

私の電子アルバムは、一つのBookに、
ユーザーフォーム3件、標準モジュール2件、クラス1件、
の構成です。

VBA Project(アルバム2002)~アルバム2017まで、
コピペ、コピペで作成したため、Codeは全て同一です。

C:\users\アルバム\アルバム2017.xlsm から、クラスを切り取り、
C:\users\アルバム\クラス.xlsm のクラスモジュールに貼りました。
クラスの名前も、JpegExif、に直しました。

しかし、アルバム2017から、このクラスを呼び出せません?
変更前は、set objJpeg=New JpegExif,です。
set objJpeg=New "C:\users\アルバム\クラス.JpegExif" ???
bookが異なるクラスを呼び出すCodeは、どう描くのでしょうか???

お礼日時:2017/06/27 21:39

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