VBAでは、外部のマクロファイルを参照設定してモジュールを取り込むことができますが、同じようなことをVBでは可能でしょうか?
具体的に何をやりたいかというと、VB内でやっている計算の、計算方法の部分のみを、ユーザーが独自にテキストファイル(VBSCript,単純なテキストファイル)で定義できるようにしたいです。どなたかご教授ください。
MSScriptコントロールを使うのが簡単でしょう。
ももたろさんが、そのようなプログラムをVB6のソースつきで公開しておられます。
http://www.momo-lab.net/inu/momomemo.html
魔界の仮面弁士様ご回答ありがとうございます。
いつも参考にさせていただいており、また質問にもご回答いただき、大変お世話になっております。
その後自分でも調べましたが、モジュールのインポートで自分のやりたいことが手っ取り早く実現できそうです。
魔界の仮面弁士様にご指摘いただいた方法を見てみましたが、私にはちょっと難しそうでした。ちなみに、魔界の仮面弁士様の方法とモジュールのインポートでは、それぞれどのようなメリット・デメリットがありますか?
なお、VBAでは、モジュールのインポートは、
ActiveWorkbook.VBProject.VBComponents.Import (読込モジュールファイル)
でインポートができるようですが、これと同じことをVB6.0で行うにはどのようにコードを書けばいいかご教授いただけますか?
更についでに教えていただきたいのですが、最近世の中の環境が.NETに移行しつつあるようですが、今回のようなモジュールのインポートは、たとえばVB.NETではもっと簡単になりますか?
以上3点ご回答いただけると幸いです。
> それぞれどのようなメリット・デメリットがありますか?
モジュールを取り込む方法だと、exeをコンパイルし直す必要がありますよね。
先に回答した Microsoft Script Control を使う方法の場合、インタプリタとして
VBScriptの構文を解釈して、ソースを動的に実行させる事ができるため、
「計算方法の部分」を、外部(ファイルやDB、レジストリなど)に保存でき、
exeを作り直す必要がなくなります。
あるいは、単純な計算が目的なら、"MSShapeプロバイダ"を経由すれば、
四則演算やVBAの関数(Sin, Abs, Logなど)を使った演算が可能となります。
(この方法の場合は、ADOを通じて計算させる事になります)
それ以外の手法としては、「計算部分」だけを、別途 DLL として作成し、
VBからそれを呼び出す……という手法もあります。ちょっと面倒ですけれどね。
> これと同じことをVB6.0で行うにはどのようにコードを書けばいいか
VBAと同様に、「VBProjectオブジェクト」を使った処理は可能ですが、
それはあくまで、開発環境用の操作となります。コンパイルされたexeに対して
処理を行う事はできませんが、それでも構わないのでしょうか。
もし、構わないというのであれば、VB6で「アドイン」プロジェクトを作成してみてください。
VB6開発環境を操作可能なActiveXコンポーネントを作れるようになります。
アドインの利用に関しては、VB6のヘルプにチュートリアルがありますので、そちらを参考に。
[Visual Basic ドキュメント]
+[コンポーネント ツール ガイド]
+[アドインによる Visual Basic 開発環境の拡張]
> 今回のようなモジュールのインポートは、たとえばVB.NETではもっと簡単になりますか?
コンパイルしなければ実行できない、という点では VB.NET でも同じかと。
ですから先の回答と同様、MSScript Controlを使って、インタプリタ的に処理させるようにするか、
もしくは処理部分をDLL化するか……あるいは、動的にコンパイルさせるという選択肢になるかと思います。
> "MSShapeプロバイダ"を
失礼。MSDataShapeプロバイダ、の間違いです。
MSDataShapeを使った演算については、以前、vbvbvb.com の掲示板に
書いた事がありますので、そちらを参考にしてみてください。
http://www.vbvbvb.com/board/Forum5/HTML/000151.html
魔界の仮面弁士様
丁寧にご回答ありがとうございます。
MSScriptControlを見ましたところ、使い方はわかりましたが、
残念ながら配列を扱うことができません。
配列を扱える、計算式定義のようなことはできないものでしょうか
・・・
最悪は、以下の善処(?)案を考えていますが、ご意見をお聞かせ
ください。
■VBで行う場合は、式定義をDLL化する
■テキストファイルを経由してファイルのやり取りをする
■SQLデータベースを経由してファイルのやり取りをする
などがあると思っています。
よろしくお願いします。
ツイート | ![]() |