[リストへもどる]
一括表示

投稿時間:2004/07/07(Wed) 22:13
投稿者名:しゅん
Eメール:
URL :
タイトル:
どの関数を呼び出すのかを自由に選択したい
いつも勉強させていただいております。

現在、「どの関数を呼び出すのかを自由に選択したいが出来るのか?」という
疑問にぶつかっております。

変数に関数名をセットし、その変数をcallすることによって変数に格納されている関数名の関数に
移動したいのです。

例えば、、、

Private Sub Command1_Click()
    dim a

    a = "testsub"
    
    Call a
End Sub

Private Sub testsub()
    MsgBox "できた"
End Sub

・・・こんな感じなのですが、上記の形では出来ないことは分かるのですが、
どうやったらいいのかわかりません。

何卒ご教授願えたらと思います。よろしくお願いいたします。

環境:VB6.0 SP4 Windows XP

投稿時間:2004/07/07(Wed) 23:14
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: どの関数を呼び出すのかを自由に選択したい
と言うより何がしたいのか、それはなぜなのかが解りません。
ただ、単に処理を分岐したいだけのように思えるのですが、通常は、関数をいくつも
作って使い分けせずに、引数等を工夫して一つの関数で色々使えるように工夫するものだと
思います。

貴方がやろうとしている事は、関数を色々作って、呼び出す時は、コードを簡単にしたい
というような事のようですが、処理をこちらからあちらに移動したのと同じ事でメリット
が無いように思うのですが。

それと、[自由に選択したいが]この自由にとはどのような使い方が貴方のいっている
自由なのか理解できません。

>rivate Sub Command1_Click()
>   dim a
>   a = "testsub"
>   Call a
>nd Sub

これなら自由ではなく固定なのでは、下記と同じかと思うのですが
rivate Sub Command1_Click()
   Call testsub
nd Sub

どの道関数を選択するのに条件分けする必要があるのでは、それなら
    Select Case WorkNo
        Case 1
            Call a
        Case 2
            Call b
        Case 3
            Call c
    End Select
変数にしても別々に指定しても変り無いのではと思うのですが。


もう少し本当にやりたい事を整理してみて下さい。

#因みに、値を返すものを関数といい SUB は関数ではありません。

投稿時間:2004/07/08(Thu) 10:02
投稿者名:しゅん
Eメール:
URL :
タイトル:
Re^2: どの関数を呼び出すのかを自由に選択したい
早速のご返事、ありがとうございます。


すいません。言葉足らずでした。

やりたいことは以下のことです。

【概要】
@TCP/IPにより他プロセスからデータを受信する。
A受信データをファイル出力する。この時、ファイル出力のフォーマットを受信データのある部分のコード(以下、Aコードとする)により変化させたい。又、Aコードとファイル出力のフォーマットの対比は今後変わるのでデータベース管理したい。

【現状考えている処理】
@TCP/IPにより他プロセスからデータを受信する。
AデータベースからAコードのフォーマットを取得する。
B受信データ中のAコードとAのデータからその受信データのファイル出力のフォーマットを決定する。
Cファイル出力Subを呼び出してファイル出力する。

そこでCの呼び出しを例えば、
Aコードが01の時のファイル出力Sub名を、  subFileOutputstyleA  とし、
Aコードが02の時のファイル出力Sub名を、  subFileOutputstyleB として作成しておき、
取得データによって

select case Aコード
       case 01
               call subFileOutputstyleA  
       case 02
               call subFileOutputstyleB 




とすれば現状では動作するのですが、
今後01のフォーマットと02のフォーマットを入れ替えたいということが発生することを考慮したいのです。

(上記ソースを今後以下のようにしたい)
select case Aコード
       case 01
               call subFileOutputstyleB 
       case 02
               call subFileOutputstyleA 




これをプログラム自体に修正を加えずに行いたいので
現在はデータベースで01  だったら subFileOutputstyleA を呼び出す、
          02  だったら subFileOutputstyleB を呼び出すというのを管理したいと思っています。

なので、プログラムソース内では
select case Aコード              ←ココは直書きでOK
       case 01                 ←ココは直書きでOK
               call subFileOutputstyleA    ←ココはデータベースで取得したデータ
       case 02                   を記述したいので直書きしたくない
               call subFileOutputstyleB 



と考えているのです。

何だか、わかりずらくなってしまいましたが・・・
やりたいことが少しわかって頂けるでしょうか?

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

投稿時間:2004/07/08(Thu) 10:12
投稿者名:S.S
Eメール:
URL :
タイトル:
Re^3: どの関数を呼び出すのかを自由に選択したい
> 現在はデータベースで01  だったら subFileOutputstyleA を呼び出す、
>           02  だったら subFileOutputstyleB を呼び出すというのを管理したいと思っています。
>
> なので、プログラムソース内では
> select case Aコード              ←ココは直書きでOK
>        case 01                 ←ココは直書きでOK
>                call subFileOutputstyleA    ←ココはデータベースで取得したデータ
>        case 02                   を記述したいので直書きしたくない
>                call subFileOutputstyleB 

横から失礼します。
まず、ある程度のところで改行してください。
それと、囲み文字(○の中に数字が入っているような文字)は使用しないで下さい。
正しく表示されないブラウザがありますので。

と、本題に戻ります。
呼び出したい関数名をDBに持たせなくてもコードでよいのではないでしょうか?
極端に言えば、Select Case "関数名" で処理を分岐してもよいと思うのですが?
論点がずれているでしょうか?

投稿時間:2004/07/08(Thu) 10:45
投稿者名:dai
Eメール:dee_bassist@hotmail.com
URL :http://homepage2.nifty.com/Dee/
タイトル:
Re^4: どの関数を呼び出すのかを自由に選択したい
> > 現在はデータベースで01  だったら subFileOutputstyleA を呼び出す、
> >           02  だったら subFileOutputstyleB を呼び出すというのを管理したいと思っています。

呼ぶ順序が変わるくらいならいいですが、
関数やサブルーチンが追加されたり名前が変更になったら、
結局、コードに手を入れることになります。

それはともかく、
クラスモジュールにしてCallByName
もしくは、
ScriptControlを使用してコード自体を外出しにしたり(使いかたを間違えるとかえって面倒)
MSKB 184740 How To Call Functions Using the Script Control
http://support.microsoft.com/default.aspx?scid=kb;EN-US;184740
が目的に適うものと思われます。

一例としては、このようなことが可能です。
フォームにText1とCommand1を貼り付けて試してみてください。
Private Sub Command1_Click()
  CallByName Me, Me.Text1.Text, VbMethod
End Sub
Public Sub SUB01()
  MsgBox "SUB01"
End Sub
Public Sub SUB02()
  MsgBox "SUB02"
End Sub
#フォームモジュールはクラスモジュールですので

投稿時間:2004/07/08(Thu) 14:16
投稿者名:しゅん
Eメール:
URL :
タイトル:
【解決】Re^5: どの関数を呼び出すのかを自由に選択したい
皆さん、ありがとうございました。

> クラスモジュールにしてCallByName
daiさんのお言葉どおり、CallByNameでやりたいことが実現出来ました。

もう少し、この辺りも学んで使用していこうと思います。
(書き込みの仕方についても、勉強します・・)

本当に助かりました。ありがとうございました。