• ベストアンサー

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

すみません、教えてください イミージエイトウインドウから myttを実行すると 「変数が必要です」のエラーがでます 教えてください Public Type myType Pos As Integer xx As Integer yy As Integer find As Integer '-1あり 0なし End Type Function mytt() Dim myzz As myType myzz.Pos = 45 mySerch (myzz) '←ここでエラー End Function Function mySerch(ww As myType) As myType ww.find = -1 End Function

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 参照渡しですから、括弧はいらないと思いますね。 mySerch (myzz) '←ここでエラー   ↓ mySerch myzz だと思いますが。

maaaa
質問者

お礼

ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#22222
noname#22222
回答No.2

構造体変数を ByRef(値による参照)で渡しています。 よって、mySerchにおいて戻り値をセットする必要はないかと思います。 Function mytt()   Dim myzz As myType   myzz.Pos = 45   mySerch (myzz)   MsgBox myzz End Function Sub mySerch(ww As myType)   ww.find = -1 End sub

maaaa
質問者

お礼

ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

mySerch関数が構造体の戻り値を必要としている関数なので、エラーが出ている個所を myyy = mySerch(myzz) とする必要があります。 パラメータとして構造体を渡しパラメータのデータに値をセットする関数(戻り値を必要としない)ならば、 Sub mySerch(wm As myType)   : End Sub とすれば、エラーが出ている個所はそのままの記述で大丈夫です。

maaaa
質問者

お礼

ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 関数の引数に複数のユーザ定義型変数を使いたい

    一つの関数の一つのパラメータが異なるユーザ定義型を受けられるようにしたいのですが、どのようにすればいいのでしょうか? Public Type TypeA strCodeA As String intNumA As Integer End Type Public Type TypeB strCodeB As String intNumB As Integer End Type Public Function funcTest(arg1 As Variant) As Integer (略) End Function と記述して関数を Dim datA As TypeA iResult = funcTest(datA) と呼び出そうとすると、次のようなエラーメッセージが表示されて進みません。 コンパイルエラー: パブリックオブジェクトモジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。

  • 変数

    Dim トータル As Integer トータル = 200 Dim 変数1(トータル) As Integer Dim 変数2(トータル) As Integer Dim 変数3(トータル) As Integer Dim 変数4(トータル) As Integer ※変数1~4に同じ数の変数(クローン??)を用意したいのですがエラーがでます。 このような使い方は出来ないのでしょうか? なお、VB上ではローマ字で使っています。 変数は6個ぐらいあり 毎回変えるのは面倒なので・・・ (スパイラルモデル方式??といっても使うのは私自信ですが・・・)

  • VBでの変数宣言は1行に2つできないのですか?

    Visual BASICで変数宣言は1行に2つ以上記述しても実際、動作します。 例 DIM A、B as Integer このように宣言すると、AもBも整数となります。 しかし、このように宣言して、この変数を Call サブプログラム名(B) のように、パラメ-タとして引き渡そうとするとエラーとなってしまうようです。 よくわからないまま、 DIM A as Integer DIM B as Integer と分けて記述したらエラーがきえたようです。 変数宣言は1行に2つ以上まとめて記述してはいけないのでしょうか? VBは Ver 5 です。

  • VBのfunctionの引数について

    2の Double型と 3の Single型のように送る側と受け取る側の変数の型が 違ってもよいのでしょうか?プログラムはそのまま実行できたのですが・・・・。 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim koku As Integer Dim san As Integer Dim rika As Integer Dim ave As Double------------------------------------1 koku = Val(TextBox1.Text) san = Val(TextBox2.Text) rika = Val(TextBox3.Text) ave = (koku + san + rika) / 3 Label5.Text = Round(ave)-------------------------------2 End Sub Private Function Round(ByVal sngvalue As Single-----3) As Integer Dim intvalue As Integer intvalue = Int(sngvalue + 0.5) Return intvalue End Function End Class

  • VB6.0 →VB2005 のアップグレードでエラー表示

    VB6.0の標準モジュールでは Private Type typset a As String b As String c As Integer End Type Public make() As typset と記述してエラーもなく正常なのですが、VB2005にアップグレードしたときに、 Option Strict Off Option Explicit On Module Module1 Private Structure typset Dim a As String Dim b As String Dim c As Integer End Structure Public make() As typset←▼エラー▼            End Module 【エラー内容】 'make' は、module 'Module1' をとおして型 'typset' を namespace 'WindowsApplication1' で公開することはできません。 structure部をPublicなどにしてもエラーは消えますが、参照先に影響が出てしまいます。 根本的な解決方法が分かりません。 教えていただけないでしょうか?

  • VB6のTYPE文をVB.NETのStructureに変えるとき

    VB6のTYPE文をVB.NETのStructureに変えるとき 下記VB6のコードをVB.NETのStructureに変える場合 Type kouzou1 i As Integer j As Integer a As String * 20 b As String * 50 End Type を下記にしてみたのですが *20,*50のところは、どのように表現するのでしょうか。 Structure kouzou1 Dim i As Integer Dim j As Integer Dim a As String * 20 <- ステートメントの終わりを示してくださいのエラーになる。 Dim b As String * 50 <- ステートメントの終わりを示してくださいのエラーになる。 End Structure お教え下さい。

  • VBA:コンパイルエラー

    http://www.microsoft.com/japan/msdn/columns/office/office06012000.asp にて示されたWebクエリダイアログを作成中: 以下の 'エラー の行で 「compile error:メソッドまたはデータメンバが見つかりません」 が発生、頓挫中。 ご教授お願いします。 Dim gcolTablesOnPage(15) As String Dim gintCurrentRecord As Integer Private Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long) Private Sub CB1_Click() WebBrowser1.Navigate2 "http://quote.yahoo.co.jp/m3?u" Call Sleep(5999) MsgBox "*" Set colTables = WebBrowser1.Document.all.tags("TABLE") End Sub Private Sub CB3_Click() Dim colTables As Object Dim colCurrentTable As Object Dim intcntr As Integer With WebBrowser1 gintCurrentRecord = 0 Set colTables = .Document.all.tags("TABLE") For Each colCurrentTable In colTables Call cHTM(colCurrentTable.outerhtml, gintCurrentRecord) gintCurrentRecord = gintCurrentRecord + 1 Next colCurrentTable End With End Sub Function cHTM(x, gintCurrentRecord) Dim tempHtml As String tempHtml = gcolTablesOnPage(gintCurrentRecord) tempHtml = "<HTML><HEAD><TITLE></TITLE></HEAD><BODY>" & x & "</BODY></HTML>" End Function Private Sub CB5_Click() Dim gintCurrentRecord As Integer gintCurrentRecord = 0 If Me.gintCurrentRecord < gcolTablesOnPage.Count Then 'エラー Me.gintCurrentRecord = Me.gintCurrentRecord + 1 WebBrowser1.Navigate2 gcolTablesOnPage(Me.gintCurrentRecord) End If ge.Count End Function

  • 【VB2005】変数の保存

    ゲームプログラムの練習をしておりまして、 たとえば、アイテムAの情報を(アイテムの名前)(アイテムの価格)(アイテムの個数) などを変数を使って、下記のような構造体で持つか悩んでいます。 Private Structure ItemData Dim Name As String Dim kakaku As long Dim kazu As integer End Structure この変数は、アイテムをデータベースのように 指定したアイテムをいつでも価格入力することにより、 そのアイテムが変更かけれるようにしたいと考えてます。 バイナリで読み書きするときは、どうすればよいでしょうか? お知恵を借りたいと思っています。

  • 変数を引き継ぐには...

    Public Sub CommandButton1_Click() Dim m As Integer m = 1 run "macro8()" End Sub Sub Macro8() range("a1")=m end sub run を実行したときに,変数mを引き継ぐ方法を教えてください。

  • VBAのプロシージャーと変数の名前の区別について

    VBAの初心者です。教えてください。 Sub ex() Dim a As Integer Dim b As Integer a = 2 a a, b MsgBox b End Sub Sub a(a As Integer, b As Integer) b = a End Sub 上記のプログラムを実行するとうまくいきません。VBAのプロシージャーと変数って同じ名前を使うとだめなのですか?教えてください。