■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#8462-0標準モジュールの使い方(制限について)ころりん2000-06-01(木) 14:26
     #8465-0RE#8462:標準モジュールの使い方(制限について)ゆう(U)2000-06-01(木) 15:02
     #8475-0RE#8465:標準モジュールの使い方(制限について)ころりん2000-06-01(木) 18:21
     #8477-0RE#8475:標準モジュールの使い方(制限について)ゆう(U)2000-06-01(木) 18:34
     #8502-0RE#8477:標準モジュールの使い方(制限について)ころりん2000-06-02(金) 13:24
     #8504-0RE#8502:標準モジュールの使い方(制限について)ももんが2000-06-02(金) 14:28
     #8508-0RE#8502:標準モジュールの使い方(制限について)ほおく2000-06-02(金) 15:07
     #8512-0RE#8504:標準モジュールの使い方(制限について)ころりん2000-06-02(金) 17:28
     #8513-0RE#8508:標準モジュールの使い方(制限について)ころりん2000-06-02(金) 17:31
#8462-0
標準モジュールの使い方(制限について)
標準モジュール(関数)を作りたいのですが、
作り方、登録方法、呼び出し方がわかりません。

呼び出し元は下記の通り
---------------------------------
Option Explicit
Private Type syouhizei
    syouhizei_ritu As Double
    zeinuki_kingaku As Double
    zeikomi_kingaku As Double
    syouhizei_kingaku As Double
End Type

Dim syouhizei_moto As syouhizei

Private Sub main()
    syouhizei_moto.syouhizei_ritu = 0.5
    syouhizei_moto.zeinuki_kingaku = 100
    syouhizei_011 (syouhizei_moto)
    MsgBox (syouhizei_moto.syouhizei_ritu)
    MsgBox (syouhizei_moto.zeinuki_kingaku)
    MsgBox (syouhizei_moto.zeikomi_kingaku)
    MsgBox (syouhizei_moto.syouhizei_kingaku)
End Sub

---------------------------------
標準モジュール(関数)は下記の通り
Public Type syouhizei
    syouhizei_ritu As Double
    zeinuki_kingaku As Double
    zeikomi_kingaku As Double
    syouhizei_kingaku As Double
End Type

Dim syouhizei_saki As syouhizei

Public Sub syouhizei_011(syouhizei_saki As syouhizei)
    syouhizei_saki.zeikomi_kingaku = zeinuki_kingaku * syouhizei_ritu _
                                   + zeinuki_kingaku
    syouhizei_saki.syouhizei_kingaku = zeinuki_kingaku * syouhizei_ritu
End Sub

このまま実行すると、

---- コンパイルエラー ----
---- ByRef引数の型が一致しません。 ----

と、エラーメッセージが出てしまいます。
引渡し値/戻り値がたくさんある場合
Public Type syouhizeiでひとまとめにして
やりとりをしたいのですが、引渡し値/戻り値は
まとめることができないのでしょうか?
#8465-0
RE#8462:標準モジュールの使い方(制限について)
> 呼び出し元は下記の通り
> ---------------------------------
> Option Explicit
> Private Type syouhizei
>     syouhizei_ritu As Double
>     zeinuki_kingaku As Double
>     zeikomi_kingaku As Double
>     syouhizei_kingaku As Double
> End Type
ここのユーザ定義型の宣言を消して下さい。

標準モジュールにある宣言とフォームモジュールに
別に宣言されている所為で、型が一致しない扱いに
なっているだけです。

詳しい事は分かりませんが、異なる宣言なので実際の
型は同じでも、別物として扱われるのでしょう。
#8475-0
RE#8465:標準モジュールの使い方(制限について)
ゆう様先ほどはどうもありがとうございました。f(^_^)
エラーは発生しなくなりました。
しかし新たな問題が。f(^_^;
データの受け渡しが上手くいきませんでした。

-------------------------------------------------
呼び出し元は下記の通り

Option Explicit
Private syouhizei_moto As syouhizei

Private Sub Form_Load()
    syouhizei_moto.syouhizei_ritu = 0.05
    syouhizei_moto.zeinuki_kingaku = 100

    syouhizei_011
    
    MsgBox (syouhizei_moto.syouhizei_ritu)
    MsgBox (syouhizei_moto.zeinuki_kingaku)
    MsgBox (syouhizei_moto.zeikomi_kingaku)
    MsgBox (syouhizei_moto.syouhizei_kingaku)

End Sub

-------------------------------------------------
標準モジュール(関数)は下記の通り

Option Explicit

Public Type syouhizei
    syouhizei_ritu As Double
    zeinuki_kingaku As Double
    zeikomi_kingaku As Double
    syouhizei_kingaku As Double
End Type

Dim syouhizei_saki As syouhizei

Public Sub syouhizei_011()

    MsgBox (syouhizei_saki.syouhizei_ritu)
    MsgBox (syouhizei_saki.zeinuki_kingaku)
    MsgBox (syouhizei_saki.zeikomi_kingaku)
    MsgBox (syouhizei_saki.syouhizei_kingaku)

'   本当は以下に演算処理が入ります。

End Sub


以上のコードを実行しても、すべての
メッセージボックスは 0 が表示されてしまいます。
Publicで宣言しているsyouhizeiに対しても
引き渡し/戻り値の宣言をしてあげないといけないのでしょうか?
標準モジュールに正しく引き渡す方法と、
帰ってきたときの戻り値を正しく受け取る方法を
教えていただけないでしょうか?
#8477-0
RE#8475:標準モジュールの使い方(制限について)
> ゆう様先ほどはどうもありがとうございました。f(^_^)
ゆう(U)でお願いします
  ^^^半角

> エラーは発生しなくなりました。
> しかし新たな問題が。f(^_^;
> データの受け渡しが上手くいきませんでした。
> 
> -------------------------------------------------
> 呼び出し元は下記の通り
> 
> Option Explicit
> Private syouhizei_moto As syouhizei
> 
> Private Sub Form_Load()
>     syouhizei_moto.syouhizei_ritu = 0.05
>     syouhizei_moto.zeinuki_kingaku = 100
> 
>     syouhizei_011
なぜ引数を消したのですか?

>     
>     MsgBox (syouhizei_moto.syouhizei_ritu)
>     MsgBox (syouhizei_moto.zeinuki_kingaku)
>     MsgBox (syouhizei_moto.zeikomi_kingaku)
>     MsgBox (syouhizei_moto.syouhizei_kingaku)
> 
> End Sub
> 
> -------------------------------------------------
> 標準モジュール(関数)は下記の通り
> 
> Option Explicit
> 
> Public Type syouhizei
>     syouhizei_ritu As Double
>     zeinuki_kingaku As Double
>     zeikomi_kingaku As Double
>     syouhizei_kingaku As Double
> End Type
> 
> Dim syouhizei_saki As syouhizei
ちなみにこれは不要です

> 
> Public Sub syouhizei_011()
先のコードのまま、引数を宣言してください
> 
>     MsgBox (syouhizei_saki.syouhizei_ritu)
>     MsgBox (syouhizei_saki.zeinuki_kingaku)
>     MsgBox (syouhizei_saki.zeikomi_kingaku)
>     MsgBox (syouhizei_saki.syouhizei_kingaku)
> 
> '   本当は以下に演算処理が入ります。
> 
> End Sub
標準モジュールとフォームモジュールで同じ変数名を宣言すると
それぞれ、標準モジュールの宣言された変数、フォームモジュールで
宣言された変数の参照になります。

※前回のコードではByRefで引数として、フォームモジュールの
 変数が引き渡されていたので、OKだったんですが・・・

 まぁそのときの標準モジュールの「Dim syouhizei_saki」は
 宣言するだけで参照はされないのでしたけど・・・
#8502-0
RE#8477:標準モジュールの使い方(制限について)
たびたびスミマセン  m(_ _)m
下記のコードの通り、引数を指定して呼び出しを行いましたが

-----------コンパイルエラー-----------
-----------変数が必要です。-----------

と、エラーが表示されました。
エラーのヘルプを見ても、Len関数に使用する変数が不正ですとか、
数式を代入しようとしています、などが記載されていて、
どれも該当しないように思えるのですが良くわかりません。

複数の引数をひとつにまとめて
引き渡し値/戻り値に指定することはできないのでしょうか?

---------------------------------------------------
呼び出し元フォームは下記の通り

Option Explicit
Private syouhizei_moto As syouhizei

Private Sub Command1_Click()

    syouhizei_moto.syouhizei_ritu = 0.05
    syouhizei_moto.zeinuki_kingaku = 100

    syouhizei_011 (syouhizei_moto)

End Sub

---------------------------------------------------
標準モジュールは下記の通り

Option Explicit

Public Type syouhizei
    syouhizei_ritu As Double
    zeinuki_kingaku As Double
    zeikomi_kingaku As Double
    syouhizei_kingaku As Double
End Type

Public Sub syouhizei_011(syouhizei_saki As syouhizei)

    MsgBox (syouhizei_saki.syouhizei_ritu)
    MsgBox (syouhizei_saki.zeinuki_kingaku)
    MsgBox (syouhizei_saki.zeikomi_kingaku)
    MsgBox (syouhizei_saki.syouhizei_kingaku)

End Sub


上記の場合の呼び出し側の引き渡し値/戻り値と
呼ばれる側の受け取り値/戻り値の指定がよくわかりません。
教えていただけないでしょうか?  m(_ _)m
#8504-0
RE#8502:標準モジュールの使い方(制限について)
> 
> たびたびスミマセン  m(_ _)m
> 下記のコードの通り、引数を指定して呼び出しを行いましたが
> 
> -----------コンパイルエラー-----------
> -----------変数が必要です。-----------
> 
> と、エラーが表示されました。

syouhizei_011 (syouhizei_moto) の行を
syouhizei_011 syouhizei_moto 又は、
call syouhizei_011 (syouhizei_moto) にしてみてください。

> 
> 上記の場合の呼び出し側の引き渡し値/戻り値と
> 呼ばれる側の受け取り値/戻り値の指定がよくわかりません。
> 教えていただけないでしょうか?  m(_ _)m

ただ単純に syouhizei_saki を引き渡すことによって、syouhizei_011 の中で内容を参照
できるというだけだと思うけど...
As syouhizei は、syouhizei_saki の Type の指定です。
#8508-0
RE#8502:標準モジュールの使い方(制限について)
> 
> たびたびスミマセン  m(_ _)m
> 下記のコードの通り、引数を指定して呼び出しを行いましたが
> 
> -----------コンパイルエラー-----------
> -----------変数が必要です。-----------
> 
>と、エラーが表示されました。
>エラーのヘルプを見ても、Len関数に使用する変数が不正ですとか、
>数式を代入しようとしています、などが記載されていて、
>どれも該当しないように思えるのですが良くわかりません。

えーと、よく分かりませんが
>syouhizei_011(syouhizei_moto)
この部分を
>Call syouhizei_011(syouhizei_moto)
の様に、Callを追加すると成功します。
または
>syouhizei_001 syouhizei_moto
でも、オーケーです。
多分配列と、間違えているのでしょう。
基本的にVBはサブルーチンの場合は
カッコはつけないか、サブルーチンであることを指すCall文の後に書きます。
基本的にパラメータが一つの場合は、コンパイルエラーは出ないので
わかりにくいのですが、パラメータが二つ以上になると
エラーが発生するので、Callをつけるか、カッコをはずすか
するように普段から心がけましょう(^o^)

>複数の引数をひとつにまとめて
>引き渡し値/戻り値に指定することはできないのでしょうか? 

クラスかこのように構造文で渡せます
#8512-0
RE#8504:標準モジュールの使い方(制限について)
> syouhizei_011 (syouhizei_moto) の行を
> syouhizei_011 syouhizei_moto 又は、
> call syouhizei_011 (syouhizei_moto) にしてみてください。
> 

操作確認したところ、教えていただいた通りに
()カッコをはずしたら上手くいきました。  (^-^)v

ありがとうございました。  m(_ _)m
#8513-0
RE#8508:標準モジュールの使い方(制限について)
> えーと、よく分かりませんが
> >syouhizei_011(syouhizei_moto)
> この部分を
> >Call syouhizei_011(syouhizei_moto)
> の様に、Callを追加すると成功します。
> または
> >syouhizei_001 syouhizei_moto
> でも、オーケーです。
> 多分配列と、間違えているのでしょう。
> 基本的にVBはサブルーチンの場合は
> カッコはつけないか、サブルーチンであることを指すCall文の後に書きます。
> 基本的にパラメータが一つの場合は、コンパイルエラーは出ないので
> わかりにくいのですが、パラメータが二つ以上になると
> エラーが発生するので、Callをつけるか、カッコをはずすか
> するように普段から心がけましょう(^o^)
> 
> >複数の引数をひとつにまとめて
> >引き渡し値/戻り値に指定することはできないのでしょうか? 
> 
> クラスかこのように構造文で渡せます


操作確認したところ、教えていただいた通りに
()カッコをはずしたら上手くいきました。  (^-^)v

ありがとうございました。  m(_ _)m
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)