none
エクセル VB から VB6 への移植に付いて RRS feed

  • 質問

  • お世話になります。

     

    お客様から頂いた(開発 エクセルVBA)ファイルを

    私(開発 VB6 SP5)の環境に移植したいのですが

    コード等はなんとか力技でするとしても

    フォームの移植方法が思いつきません。

     

    VBAでフォームをエクスポートした物をVB6でインポートすると

    デザイナになってしまいます。

     

    私はデザイナで開発した事が無いのでこれがなんなのか?わかりません。

     

    どなたかご教授下さい。

     

    宜しくお願い致します。

     

    2008年7月29日 6:21

回答

  • やったことが無いのでデザイナになってしまうというイメージがわきませんが、

    少なくともVBAでのフォームやコントロールはForms 2.0という専用のコンポーネントであり

    いわゆるVisualBasicで用意されているものとは物そのものが異なります。

    互換性に期待ができませんので、VBAのデザインを見ながらVB6側でデザインしなおしたほうが速いかもしれません。

     

     

    2008年7月30日 4:05
  • >私はデザイナで開発した事が無いのでこれがなんなのか?わかりません。

     

    「デザイナ」とは、

    VB6フォーム以外の「GUI開発」をVBIDE内で実現するための拡張機能です。

    メニューの

    「プロジェクト」⇒「コンポーネント」⇒「デザイナ」タブ

    に進むと、追加可能なデザイナの種類が一覧出来ます。

    VBAのフォームである「MicrosoftForms2.0」と

    ADOのデータコネクションデザイナの「DataEvironment」辺りが

    メジャーどころだと思います。

     

    ExcelVBAのフォームは「MicrosoftForms2.0」に当たりますが

    基本的には「VB6のフォームとあらゆる面で互換性がない、別物」

    という以外は、「デザイナ=フォーム」と考えてしまって問題ないと思います。

     

     

    >コード等はなんとか力技でするとしても

    >フォームの移植方法が思いつきません。

     

    フォーム自体のイベントや、ListBoxなど基本コントロールのプロパティ、イベントに

    幾つかの違いがあるので、それらを理解して

    一つ一つVB6上でフォームを作り直すのが一番の正攻法です。

    手間は掛かりますが、可能な限りこの方法をお勧めします。

     

    ですが、「幾つかの違い」が、非常にやっかいになることがあり

    イベント発生のルールが違ったり、プロパティーの有無が違ったりなどで

    VBAでの実装によっては「移植不可能」なケースもありえます。

    例:

    ・リストボックスで、マウス押下のまま選択位置を変更した時に

     Clickイベントが発生する⇒VBA

     MouseUpまでClickイベントが発生しない⇒VB6

    ・コンボボタンにFocusした際にIMEが

     自動的に無効になる⇒VBA

           無効にならない⇒VB6

    などなど。

     

     

    お客様の依頼内容によりますが、「デザイナ」のまま

    開発を続ける方が、メリットが大きい場合も多いと思います。

    (経験上、どっちもどっちですが)

     

    その際、「デザイナ」について気をつける点は以下の2点です

    (他にもあったら、どなたか補足お願いします)

     

    ①「デザイナ」のフォームは「FM20.dll」という「Microsoft Forms 2.0 library」を参照しますが

     このDLLはOfficeアプリケーションに同梱されるもので、「再頒布権」は、VB6開発者にありません。

     配布の際に同梱しないよう、気をつける必要があります。

    ②VB6備え付けの「ツールボックス」からは、ボタンやラベルといったコントロールを追加出来ません。

     デザイナのフォームの右クリックメニューから「ツールボックス...」をクリックすると

     専用のツールボックスが開かれます。こちらからコントロールを追加します。

     VB6専用の幾つかのコントロールは使用出来ません(Timerコントロールなど)

     VB6の「メニューエディタ」も使えません 

     

    ご参考になれば幸いです。

    2008年8月4日 1:16

すべての返信

  • やったことが無いのでデザイナになってしまうというイメージがわきませんが、

    少なくともVBAでのフォームやコントロールはForms 2.0という専用のコンポーネントであり

    いわゆるVisualBasicで用意されているものとは物そのものが異なります。

    互換性に期待ができませんので、VBAのデザインを見ながらVB6側でデザインしなおしたほうが速いかもしれません。

     

     

    2008年7月30日 4:05
  • >私はデザイナで開発した事が無いのでこれがなんなのか?わかりません。

     

    「デザイナ」とは、

    VB6フォーム以外の「GUI開発」をVBIDE内で実現するための拡張機能です。

    メニューの

    「プロジェクト」⇒「コンポーネント」⇒「デザイナ」タブ

    に進むと、追加可能なデザイナの種類が一覧出来ます。

    VBAのフォームである「MicrosoftForms2.0」と

    ADOのデータコネクションデザイナの「DataEvironment」辺りが

    メジャーどころだと思います。

     

    ExcelVBAのフォームは「MicrosoftForms2.0」に当たりますが

    基本的には「VB6のフォームとあらゆる面で互換性がない、別物」

    という以外は、「デザイナ=フォーム」と考えてしまって問題ないと思います。

     

     

    >コード等はなんとか力技でするとしても

    >フォームの移植方法が思いつきません。

     

    フォーム自体のイベントや、ListBoxなど基本コントロールのプロパティ、イベントに

    幾つかの違いがあるので、それらを理解して

    一つ一つVB6上でフォームを作り直すのが一番の正攻法です。

    手間は掛かりますが、可能な限りこの方法をお勧めします。

     

    ですが、「幾つかの違い」が、非常にやっかいになることがあり

    イベント発生のルールが違ったり、プロパティーの有無が違ったりなどで

    VBAでの実装によっては「移植不可能」なケースもありえます。

    例:

    ・リストボックスで、マウス押下のまま選択位置を変更した時に

     Clickイベントが発生する⇒VBA

     MouseUpまでClickイベントが発生しない⇒VB6

    ・コンボボタンにFocusした際にIMEが

     自動的に無効になる⇒VBA

           無効にならない⇒VB6

    などなど。

     

     

    お客様の依頼内容によりますが、「デザイナ」のまま

    開発を続ける方が、メリットが大きい場合も多いと思います。

    (経験上、どっちもどっちですが)

     

    その際、「デザイナ」について気をつける点は以下の2点です

    (他にもあったら、どなたか補足お願いします)

     

    ①「デザイナ」のフォームは「FM20.dll」という「Microsoft Forms 2.0 library」を参照しますが

     このDLLはOfficeアプリケーションに同梱されるもので、「再頒布権」は、VB6開発者にありません。

     配布の際に同梱しないよう、気をつける必要があります。

    ②VB6備え付けの「ツールボックス」からは、ボタンやラベルといったコントロールを追加出来ません。

     デザイナのフォームの右クリックメニューから「ツールボックス...」をクリックすると

     専用のツールボックスが開かれます。こちらからコントロールを追加します。

     VB6専用の幾つかのコントロールは使用出来ません(Timerコントロールなど)

     VB6の「メニューエディタ」も使えません 

     

    ご参考になれば幸いです。

    2008年8月4日 1:16
  • こんにちは、フォーラムオペレータ大久保です。

     

    ひつまぶし さん、フォーラムのご利用ありがとうございます。

    Tai-D さん、ものすごく詳しい説明をありがとうございます。

     

    この情報を多くのみなさんにぜひ役立てていただきたく、Tai-D さんの投稿と、アドバイスをくださった まどか さんの投稿に「回答済み」チェックをつけさせていただきました。

    ひつまぶし さんの意図と違っていましたらごめんなさい。

     

    それでは、今後とも MSDN フォーラムをよろしくお願いします。

     

    2008年8月11日 8:54