• 締切済み

VB6-標準モジュールとの変数の受け渡し

VB6の初心者です。ごく初歩的な問題でお恥ずかしいのですが困っています。 標準モジュール内にある以下のサブルーチンを行わせるために、 Sub Transform(NumSamples As Long, RealIn() As Double, ImageIn() As Double, RealOut() As Double, ImagOut() As Double, Optional InverseTransform As Boolean = False) (NumSamples、RealIn()、ImageIn()は入力値) (RealOut()、ImagOut()は戻り値) ... ... End Sub フォームモジュール内で以下のようにコールすると、 Private Sub cmdStart_Click() Dim A as Long Dim B(10000) as Double Dim C(10000) as Double Dim D(10000) as Double Dim E(10000) as Double ... (A,B,Cに数値入力) ... Call Transform(A, B(), C(), D(), E(), False) End Sub で実行すると、変数D()に対して「コンパイルエラー:型が一致しません:配列またはユーザ定義型を指定してください」が出ます。なお、配列は10000まで宣言していますが実際には0~4096を使っています。 変数型は合わせているはずなのになぜエラーになるのでしょうか。D(),E()の型宣言をPublicにして標準モジュール内に入れたり、いろいろやってみたつもりですがうまくいきません。 よろしくお願いします。

みんなの回答

  • allineed
  • ベストアンサー率54% (13/24)
回答No.1

回答ではないのですが、 試しにVB6 SP4で下記のコードを書いて実行してみましたが、正常に動作しました。 このソースでも同じエラーが出ますか? もしエラーにならなければ、宣言の方法や構造以外の問題だと思います。 == Form1のcmdStartボタンイベント ============- Private Sub cmdStart_Click()   Dim A As Long   Dim B(10000) As Double   Dim C(10000) As Double   Dim D(10000) As Double   Dim E(10000) As Double   A = 4096   For i = 0 To (A - 1)     B(i) = i     C(i) = i   Next   Call Transform(A, B(), C(), D(), E(), False)     For i = 0 To (A - 1)     Debug.Print D(i)     Debug.Print E(i)   Next End Sub ============================================== == Module1のTransform()関数 ================== Sub Transform( _   NumSamples As Long, _   RealIn() As Double, ImageIn() As Double, _   RealOut() As Double, ImagOut() As Double, _   Optional InverseTransform As Boolean = False)   For i = 0 To (NumSamples - 1)     RealOut(i) = RealIn(i)     ImagOut(i) = ImageIn(i)   Next End Sub ==============================================

cat-crl
質問者

お礼

わざわざテストまでしていただき感謝です! 早速試してみたいと思います。 ありがとうございました。

関連するQ&A

  • 変数を複数のモジュール間で共有する方法

    VBAで大きなプログラムを書いた際に、 後から修正したりしやすくするために、機能ごとにモジュールに分けて保存しておきたいと考えています。 例えば、 sub call start(a, b, c, d, e, f, ,・・・・・) call first(a, b, c, d, e, f, ,・・・・・) call second(a, b, c, d, e, f, ,・・・・・) ・・・・・ end sub のようにcallで繋いでいけば、複数のモジュールに機能を分散させることができるのですが、 変数をいちいち、括弧内に入れる必要があり、 後から修正するのが大変です。 sub call start() call first() call second() ・・・・・ end sub のように変数を書かずにcallを使いたいのですが、 複数のモジュール間で変数を共有することってできないのでしょうか? また、Excelのデータシートには、データ→グループ化という機能がついていますが こういうような機能はVBAにはないのでしょうか?

  • 標準モジュールにpublicで宣言するしかない?

    フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?

  • 標準モジュールとクラスモジュールについて

    標準モジュールでType型を使用しています。 この標準モジュールをクラスモジュールに置き換えて、Formから呼び出すCOMに作り変えたいのですが、引数ってどう設定したらよいのでしょうか? 今は標準モジュールなので、こんな感じで呼んでいるのですが・・・ 例) Private Sub Command1_Click() Dim in_b As IN_PARA Dim out_b As OUT_PARA in_b.Name = "山本太郎" in_b.Seikaku = "優しい" in_b.Syumi = "釣り" in_b.Tokugi = "野球"

  • 標準モジュールについてなのですが

    すみません。教えてください(/_;)VB6にて理解できないことがあります。いくつものパスを標準モジュールに記述できると知り、早速見やすいプログラムにしようと思い、標準モジュールを追加しました。サンプルなどを調べ、Function Apath() as stringを理解しました。フォームの方にはpath = Apathって書いておけばいいと書かれていたのでその通りにしました。しかし、見に行ってはくれません(>_<)で、いろいろやってみてあることに気づきました。変数を宣言してたら、ダメでしてなかったらちゃんと見に行ってくれます。 Dim path as string,Dim Apath as string.Apathを消すと働いてくれます。宣言が間違っているのでしょうか?標準モジュールをこのような感じで利用するには何か重大なルールがあるのでしょうか?すいません、初心者すぎる質問で<(_ _)>しかし、聞かぬは一生の恥と思い質問しました(>_<)よろしくお願いいたします<(_ _)>

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

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

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

  • ACCESS2003 標準モジュールCALLについて

    お世話になります。 ACCESS2003で、標準モジュールの呼び出しについて次のような流れを 作りたいと思っていますす。 標準モジュール名:TEST public sub AA() dim txtB as string (*1 txtB = "TEST.subBB" (*2 call txtB end sub 実現させるには、*1の命令がobjectまたはmodule型で宣言し、 2)はset命令を利用すると思います。 どのように命令作成してよいか困っています。 実際に作成する場合、どのような設定、命令が必要でしょうか。 既出、文献でも教えていただけないでしょうか。 よろしくお願いします。

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

    こんにちは。 標準モジュールからフォームのリストボックスに文字を追加したいんですが、うまくいきません。 まず、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

  • VBA クラスモジュールの使い方わかりません。

    為替データで検証中なのですがネットで使いたいクラスモジュールがあり、値の渡し方などわからなくて困ってます。 過去1ヶ月のデータで日付、始値、高値、安値、終値並んでいる値を標準モジュールからTRと言う名のクラスモジュールに渡して計算したいのですがわかりません。 標準モジュールのみで簡単なマクロを作れるレベルです。 下がTRクラスモジュールです。 どなたかお助けください。 Option Explicit Public Version As Long Public Description As String Public NumInSequences As Long Public NumParams As Long Private Sub Class_Initialize() Version = &H10000 Description = "TR(真のレンジ)" NumParams = 0 NumInSequences = 4 End Sub Public Sub Calc(A() As Double, O() As Double, H() As Double, L() As Double, C() As Double) Dim I As Integer Dim LastClose As Double '前日の終値 For I = LBound(A) To UBound(A) If C(I) = Invalid Then A(I) = Invalid GoTo NextElem End If Dim D1 As Double '今日の高値と安値の差 Dim D2 As Double '前日の終値から今日の高値までの差 Dim D3 As Double '前日の終値から今日の安値までの差 If LastClose = Invalid Then A(I) = Invalid LastClose = C(I) GoTo NextElem End If ' 3つのパターンのレンジを計算 D1 = H(I) - L(I) D2 = H(I) - LastClose D3 = LastClose - L(I) If D1 > D2 Then A(I) = D1 Else A(I) = D2 End If If (A(I) < D3) Then A(I) = D3 End If LastClose = C(I) NextElem: Next End Sub

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。