• ベストアンサー

VB6で開発中…標準モジュール間での関数の呼び出し方は?

Form1.frm内から、標準関数yyy.bas内に記述しているSub yyy()を呼び出したいのですが、コンパイルエラーとなります。 呼び出し方法が間違っているのだと思いますが、お教え下さいませ。 <Form1.frm内> Private Sub xxxxxx()  yyy End Sub <yyy.bas> Sub yyy()  ・・・・ End Sub

  • THUBAN
  • お礼率76% (771/1002)

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.7

標準モジュールかフォームにつけたオブジェクト名がyyyになってませんか?

THUBAN
質問者

お礼

ありがとうございます。 それでした! 標準モジュールに関数名と同名のyyy(yyy01.bas)としていました。 別名にしたところ、エラーが出なくなりました。 当方のぼんミスでした・・ 皆さま、お手数おかけいましたした&ありがとうございました m(__)m

その他の回答 (7)

  • k_tatu
  • ベストアンサー率16% (2/12)
回答No.8

<yyy.bas> Sub yyy()  ・・・・ End Sub は、完全なる例じゃなかったみたいですね。 yyy.basの名前を変えるか 関数yyyを変えてください。 モジュール名と関数名は同様のものはいけません。

THUBAN
質問者

お礼

ありがとうございます。 まさにそれでした。 大変失礼いたしました。

  • k_tatu
  • ベストアンサー率16% (2/12)
回答No.6

<yyy.bas> Sub yyy()  ・・・・ End Sub これでは駄目です。 <yyy.bas> Public Sub yyy()  ・・・・ End Sub にしましょう。 それと、Callはつけてもつけなくても全く問題ありません。

THUBAN
質問者

補足

はい、実はそれもすでに試してみた(以下のように)のですが、同様のエラーとなるので???なのです。 <Form1.frm内> Private Sub xxxxxx()  yyy End Sub <yyy.bas> Public Sub yyy()  ・・・・ End Sub

回答No.5

順次コンパイルオプションをはずして、実行したら、エラーが出力されると思います。 エラー内容を教えてください。 メニューより  ツール  オプション  全般タブ  コンパイル  順次コンパイルをoff

THUBAN
質問者

補足

ありがとうございます。 エラーは以下の内容でポップアップウインドに表示されています。 ------------------ コンパイルエラー: モジュールではなく、変数またはプロシージャを指定して下さい。

  • kagep
  • ベストアンサー率23% (171/721)
回答No.4

yyy.basはプロジェクトに関連付けられていますか? (プロジェクトのエクスプローラウインドウに表示されてますか?) なければ、yyy.basをプロジェクトに追加してください。 これで上手くいかないかな? もう長期に渡ってVB触ってないので、自身無しにさせてください。苦笑

THUBAN
質問者

補足

ありがとうございます。 プロジェクトの標準モジュールのところにyyy.basはちゃんと追加してあるのですがエラーとなります・・

  • i_yuari
  • ベストアンサー率24% (6/25)
回答No.3

 yyy ↓ Call yyy とすればOKですよ もし、Sub yyy()に引数を設定するのであれば、 Call yyy(引数) となります。

THUBAN
質問者

補足

ありがとうございます。 以下のようにCallを付けてみましたが、やはりエラーになります。 <Form1.frm内> Private Sub xxxxxx()  Call yyy End Sub <yyy.bas> Sub yyy()  ・・・・ End Sub

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

Call yyy でどうでしょうか? 経験的に知っているだけなので、何でCallがいるの?ってのはよく知りませんが。

THUBAN
質問者

補足

ありがとうございます。 以下のようにCallを付けてみましたが、やはりエラーになります。 <Form1.frm内> Private Sub xxxxxx()  Call yyy End Sub <yyy.bas> Sub yyy()  ・・・・ End Sub

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

引数ありませんか?

THUBAN
質問者

補足

ご回答、ありがとうございます。 はい、引数も戻り値もありません。

関連するQ&A

  • VB.netで標準モジュールからフォームを呼び出す

    お世話になります。 標準モジュールから以下のようにフォームを呼び出しているんですがうまく表示されません。 どこが悪いんですか? 標準モジュール内----------------------   Public Sub Main()     Dim frm1 As New Form1     frm1.Show()   End Sub

  • 標準モジュールからフォームをコントロールしたい

    こんにちは。 標準モジュールからフォームのリストボックスに文字を追加したいんですが、うまくいきません。 まず、button1をクリックすると、共通モジュールのサブルーチンを呼び出します。そして引数"0"を渡すと、Form1のListBox1に"hello"を追加したいのです。 実行させると、エラーはでないのですが、追加されるはずの"hello"がListBox1に追加されません。 たぶん     frm1.ListBox1.Items.Add("hello") あるいは    Dim frm1 As New Form1() あたりの宣言の仕方がまずいのだと思うんですが... どなたか、ご教授よろしくお願いします。 ■共通モジュール Module Module1 Dim frm1 As New Form1() Sub PC(ByVal PCrecieve As String) If PCrecieve = "0" Then frm1.ListBox1.Items.Add("hello") End If End Sub End Module ■フォーム Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call PC("0") End Sub End Class

  • フォームのイベントを標準モジュールから呼び出す

    フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。

  • 標準モジュールとイベントの質問

    初めて質問します。 ビジュアルベーシックで標準モジュールで ボタンのクリックイベントを実行したいのですが どうやってプログラムすればいいんでしょうか? 今の会社に入っていきなりVBの仕事させられて とっても困っています。 Private Sub Frm1Command1_Click() Call Module1.Frm1Command1_Click End Sub こんな書き方じゃなくて、標準モジュール内で Public Sub Command1_Click() MsgBox "sine" End Sub って書いて実行できるようにしなくてはダメなんです。 どうすればいいんでしょうか? もしかして無理なんでしょうか? これ、上司の嫌がらせだったらイヤですね・・・。

  • 並列処理させる方法を教えてください。

    VB6(SP3) OS:Windows200で並列処理させる方法を教えてください。 以下の並列処理を別画面で行いたいのですが、どうしたらよいでしょうか? 並列処理の内容 1.DBへデータのロード(親フォームのボタンで実行) 2.1の処理状況(ログ)を子画面で表示(親フォームのボタンが押されたら、子 フォームとして起動する) ログを表示する画面は、共通部品として使用したいため、 ログの出力を直に書きたくありません。 以下は、当然、動かないんですけど、動かしたいイメージです。 Fom1.frm、Module1.bas、Form2.frmは、同じプロジェクトに 存在します。 =============Form1.frm============= Private Sub Command1_Cpralick() call DataLoad() end sub Public Sub InsertData() Form2.LogOut("XX件目を書き込んでいます。") '・・・データをインサートする処理 end sub =============Module1.bas============= private sub DataLoad() Call Form2.Show(vbModal, Form1) '※1 'DB書込み Call Form1.InsertData() '書込み結果 Form2.LogOut("成功しました。") Form2.hide end sub =============Form2.frm=============== Public Sub LogOut(LogMsg As String) Form2.lbl_Log.Caption = LogMsg End Sub Module1.basの中の※1で処理がForm2に移ってしまい、 Module1.basの※1以下の処理が当然実行されません。 また、前述しました通り、Form2.frmは使いまわししたいので、 Form2.frmにはこれ以上コードを書きたくありません。 Form2は、一応モーダルで起動したいです。 ご教授よろい敷くお願いします。

  • Formオブジェクトについて

    Formオブジェクトに関する質問です。 ある関数にフォームオブジェクトを引数として渡してやりたいのですが、何かよい方法はありますでしょうか? 例) Private Sub cmdTest_Click(Index as Integer) Dim frm as Form If Index = 0 then Load_Test(Form 2) Else Load_Test(Form 3) End if End Sub Private Sub Load_Test(frm as Form) frm.Show frm.Label1.Caption = "TEST” End Sub

  • 標準モジュールだとエラーになる理由を教えてください

    アクセスのフォームの上にコマンドボタンを一つ設置して、 クリックイベントで Private Sub コマンド0_Click() DoCmd.Close acForm, Me.Name End Sub とすれば、自身のフォームが閉じます。 しかし、 Private Sub コマンド0_Click() Call test End Sub と、 標準モジュール Option Compare Database Option Explicit Sub test() DoCmd.Close acForm, Form_フォーム1 End Sub にすると、 実行時エラー2498 指定した式は、 いずれか の引数とデータ型が対応していません。 になります。 行ってる意味は同じだと思うのですが、 なぜエラーになるのか教えていただけますか?ご教授よろしくお願いします。

  • Friend は標準モジュールじゃ宣言できない?

    Public Sub test1() End Sub とは出来るけど Friend Sub test2() End Sub はできないのでしょうか? Friend Sub test2を標準モジュールに書こうとすると -------------------------------- コンパイルエラー オブジェクト モジュールでのみ有効です。 使用したステートメントまたは構文要素 (たとえば、Implements ステートメント、WithEvents キーワード、イベント シンクなど) は、オブジェクト モジュール以外のコードでは使用できません。 エラーの原因となったステートメントを、オブジェクト モジュール内に記述します。 -------------------------------- となってしまいます。 「オブジェクト モジュール以外のコードでは使用できません。 」=標準モジュールでは使用できないと言う事でしょうか?

  • VB2008 Formを関数の引数にする

    お世話になります VB2008で開発をしています Formを2つ作成し どちらも同じ名称のテキストBOX(TextBox1)コントロールを貼り付けています Publicの関数でそれぞれのFormに値をセットしたいのですが 「'TextBox1' は 'System.Windows.Forms.Form' のメンバではありません。」 とエラーが発生してしまいます 初歩的な質問で申し訳ありませんが ご助言頂けると助かります 宜しくお願い致します ソース: --------------------------------------------------- Module Module1 Public Sub Main() Dim Form1 As New Form1 Dim Form2 As New Form2 SetValue(Form1) SetValue(form2) End Sub Private Sub SetValue(ByVal obj As Form) obj.TextBox1 = "TEST" End Sub End Module ---------------------------------------------------

  • 同じマクロ名でも、違うモジュールならエラーにならな

    同じマクロ名でも、違うモジュールならエラーにならない? エクセルVBAについてご教授ください。 標準モジュールに ――――――――― Option Explicit Sub CommandButton1_Click() MsgBox "" End Sub Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― と同じマクロ名を2つ作ったら、コンパイルエラーになりますが、 上記のコードは一度消して、フォームモジュールに ――――――――― Private Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作り、 標準モジュールに ――――――――― Sub CommandButton1_Click() MsgBox "" End Sub ――――――――― を一つ作った場合は、エラーにならずにマクロを実行できました。 これは、フォームモジュールがPrivate Subだからでしょうか? フォームモジュールに1つ、 標準モジュールに1つ なら同じマクロ名を使っても、エラーにならないという事でしょうか? よろしくお願いします。

専門家に質問してみよう