• ベストアンサー

sub又はfunctionが定義されていない??

プログラム内容 4たくの問題を乱数で出す(テスト用のPGのため数字にしていますが、実際は文字が入ります) Private Sub Form_Load() Dim Total As Integer Dim mo() As String Dim se_a() As String Dim se_i() As String Dim se_u() As String Dim se_e() As String Dim ka() As String Dim kai() As String Total = 3 ReDim mo(Total) As String ReDim se_a(Total) As String ReDim se_i(Total) As String ReDim se_u(Total) As String ReDim se_e(Total) As String ReDim ka(Total) As String ReDim kai(Total) As String '----------------------- mo(1) = "1 + 1" mo(2) = " 2 + 2" mo(3) = " 3 + 3" '----------------------------- se_a(1) = "2" se_a(2) = " 2" se_a(3) = " 2" se_i(1) = "3" se_i(2) = "3" se_i(3) = "3" se_u(1) = "4" se_u(2) = "4" se_u(3) = "6" se_e(1) = "7" se_e(2) = "5" se_e(3) = "9" '-------------------------- ka(1) = "ア" ka(2) = "ウ" ka(3) = "ウ" kai(1) = "a" kai(2) = "s" kai(3) = "s" '----------- End Sub Private Sub kotae_Click() kaitou.Visible = True End Sub Private Sub next_Click() Dim i As Integer kaitou.Visible = False i = Int(Rnd * Total) + 1 NO.Text = i MONDAI.Text = mo(i) select_a.Text = se_a(i) select_i.Text = se_i(i) select_u.Text = se_u(i) select_e.Text = se_e(i) kaitou.Text = ka(i) End Sub でエラーが出ます。何がおかしいのでしょうか MONDAI.Text = mo(i) にエラーがあるようなのですが・・・。 kai =解説

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

  • ベストアンサー
  • kmor
  • ベストアンサー率27% (225/825)
回答No.3

このサンプルコードだとできますよ。 ちゃんと"aaa"と表示されます。 Option Explicit Private mo() As String Private total As Integer Private Sub Form_Load() total = 3 ReDim mo(total) As String mo(0) = "aaa" Debug.Print mo(0) End Sub

daisuke-123
質問者

お礼

何とかできました。 ご回答ありがとうございました。

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

その他の回答 (2)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.2

こんばんは。 mo(i) は、Form_Load() の中で宣言していますよね。 そうすると、Form_Load() のプロシージャ内でなければ使えないんです。 エラーになったところは、next_Click()というイベントプロシージャの中ですよね。 なので、m(i)は配列変数ではなく、プロシージャ(sub)かファンクションの 呼び出しと解釈されてしまったんですね。(括弧がついているから) (ここを消しても、この後の行で同じエラーが出るはずです) ということで、解決方法ですが、 Dimの最初の行からReDimの最後の行までの部分をsubの前に出してください。 そうすれば、他のsubやFunctionからも扱えるグローバルな変数となります。

daisuke-123
質問者

お礼

 ご回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • kmor
  • ベストアンサー率27% (225/825)
回答No.1

再び、kmorです。 このような場合、どこでどういうエラーが出るかを書いておくと非常に答えやすいですよ。 お察しのとおり、おそらく MONDAI.Text = mo(i) でエラーになっているんでしょう。 mo()はForm_Loadの中で定義されていますね。 VBはサブルーチン、ファンクションが変われば、その中で定義されている変数は使えないのです。 対策として、全てのサブルーチン、ファンクションの外で定義すれば出来ます。 Option Explicit Private mo() As String Private Sub Form_Load() ReDim mo(Total) as String : : End Sub といった感じです。

daisuke-123
質問者

補足

ご回答ありがとうございます はじめは奏していましたが、 total=3 というのが使えないようなのですが・・。 プロシジャーの外では無効ですと出てきます。

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

関連するQ&A