
*.jpgファイルの撮影日時を、自作プログラムに読み込む必要に迫られ、いろいろお尋ねしました。
その結論は、ユーザー定義関数を自作して利用する、でした。
その時ご紹介頂いたのが、WEB公開のJpegExifクラスのCodeの利用でした。
その際、もっと端的に、システム内臓の、ADODB.Streamや、WIA.ImageFileを使って、
撮影日時を読み出す方法も教えて頂きました。
今回は、自前のCodeで撮影日時を読み出す事が目標でしたので、現在は、標準モジュールに、
JpegExifクラスの簡易版を置いて、自作プログラムを動かしています。
この際の試行錯誤の過程で、この簡易撮影日時読み出しFunctionを、クラスモジュールに置いたり、
標準モシュールに置いたり、いろいろテストしました。
両方の機能は同じで、使い勝手は標準モジュールに置いた方でした。
規模の大きいシステムで、クラスモジュールを使いこなされている方々にお伺いしたいのですが、
特定のFunctionを、クラスモジュールに置くか標準モジュールに置くかの判断の分岐点は何でしょうか?
No.2ベストアンサー
- 回答日時:
昨日に書いた内容は、間違っていました。
申し訳ありません。『ブック間をまたぐようなものに関しては、その利便性は発揮しますが、……』
実際にこちらでユーザー定義関数を作ってやってみました。実際にやるのは、たぶん、二度目ぐらいで、うっすらと記憶のある程度でした。
私の言葉の説明よりも絵をみていただければよいのですが、
http://yamav102.cocolog-nifty.com/blog/2013/07/v …
Class のプロパティのInstancing を 「PublicNotCreateable」にして、相手のブックで、参照設定して、Classから呼び出すと、簡単に説明するとそうなるのですが、
昨日から、いろいろ検証してみたのですが、クラス・オブジェクトは、Public にすれば、Projects 間で簡単に融通が利くと思っていたのです。ところが、これでは、手数が多すぎます。これしかないのなら、やむを得ずおすすめしますが、アドインとして呼び出したほうが楽に扱えます。
ご質問者さんのは、ユーザー定義関数のスタイルですから、クラスを辞めて、標準モジュールに戻した後、ファイルをアドイン型(.xlam)で保存します。そして、アドインで呼び出した方が早いことが分かりました。
>VBAで、Functionを、クラスモジュールに置くか? 標準モジュールに置くか?
結果としては、標準モジュールの方が良いということになりました。
なお、違うブックで、モジュールを共用して呼び出すなら、アドインにする必要もなく、VBEditor 内の相手のブック側で参照設定をすればよいです。
WindFallerさん、こんにちは!
再度、いろいろなTESTまでして、詳細なコメント送って頂き、
本当に有難う御座いました。
私のレベルでは、特定なFunction (ユーザー定義関数)は、
Codeの切り分けが目的であれば、クラスを使わずに、
追加の標準モジュールに置けば良いらしいと理解できました。
また、ご紹介頂いたアドインの手法は、初めて対峙する概念で、
少しお時間を頂いて解読にチャレンジしてみます。
今回は、有難う御座いました。
No.1
- 回答日時:
こんにちは。
>クラスモジュールに置くか標準モジュールに置くかの判断の分岐点は何でしょうか?
ブック間をまたぐようなものに関しては、その利便性は発揮しますが、1つのブックに属している限りは、それほど変わりはありません。
時々、VB6に馴染んだ人が、VBAでクラスでユーザー定義関数を作っているのを見かけます。
本来、クラスは、主に、Office の場合は、インスタンスを生成することが多いわけです。クラスそのものは、オブジェクトです。オブジェクトの中に、プロパティに該当するユーザー定義関数とメソッドに該当するプロシージャとを用意させます。クラスである以上、そしてメモリ上に置いている限りは、どこでも、そのオブジェクトと共に、設定された機能を呼び出せます。新たなコードを作らなくてもクラスから機能を呼び出せるので良いのではないかと思います。それは、ブックを指定すれば標準モジュールに書いても同じだと言えば、そのとおりです。
ところが最近、Githubを中心にしたExcel VBAによるクラスを使ったコードを見かけることがあるのですが、正直な話、私にはよくわからないことが多いのです。偶然にも、私は、同じようなコードを書いてはいたものの、そちらのクラスを使ったものは、俯瞰的にみることが出来ず、そのコードの断片しか見られないのです。書いている人間はよく分かっているだろうけれども、途中からではさっぱり分かりません。実力がないからと批判されるかもしれませんが、はたして、Excel VBAというもの、そしてクラスというものは、そういうものだったのか、と首をかしげてしまいます。
参考:
http://thom.hateblo.jp/entry/2015/10/01/202952
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は、どう描くのでしょうか???
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- その他(応用科学) 標準周波数報時電波っていまだに必要ですか 13 2022/06/20 06:48
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- 写真・ビデオ 【アンドロイド】トップ画面から一発で起動できてすぐに、撮影開始できる動画撮影アプリはありますか? 2 2023/07/26 19:26
- エアコン・クーラー・冷暖房機 エアコンの移設工事費について 2 2023/05/12 14:32
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- 世界情勢 監視カメラの世界標準 3 2023/07/10 09:28
- 固定資産税・不動産取得税 古い住宅を物置にして固定資産税を軽減したい。 2 2023/05/24 08:19
- その他(自然科学) 光を保存する方法 8 2023/01/31 10:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Form1に記述されたスクリプトを...
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
Excel vbaで複数のテキストボッ...
-
C# Process.Start で標準入力
-
VB.netで、動的な型変換を行い...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
実行時エラー 438になった時の...
-
VBA(エクセル)で自動的にボタン...
-
「Columns("A:C")」の列文字を...
-
ユーザーフォームを表示中にシ...
-
テキストボックス中の文字列の...
-
【C#/Java?】try-catchでcatch...
-
なぜこんな初歩的なVBAのIf文で...
-
EXCELでactivexコントロールを...
-
ユーザーフォームで動的(Me.Con...
-
パソコンへの「Dropbox...
-
vbaのエラー対応(実行時エラー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
他のモジュールのプロシージャ...
-
VB.netで、動的な型変換を行い...
-
VB6で外部から静的アクセスが可...
-
Excel vbaで複数のテキストボッ...
-
WPFでCanvas の子要素にアクセ...
-
VBAで、Functionを、クラスモジュール...
-
Python クラスとモジュールの...
-
C#でのWebRequestでのPOSTについて
-
コンポーネント指向って、どの...
-
C# Process.Start で標準入力
-
用語の意味の違いを教えてくだ...
-
VBA クラスにプロパティが実装...
-
'StructLayout' の仕様について
-
VBA オブジェクト追加
-
現在使用しているJAVAファイル...
-
ジェネリクスについて
-
VB.NETにて文字列で指定した関...
-
Form2の変数をForm1に渡す方法...
おすすめ情報