dポイントプレゼントキャンペーン実施中!

プログラム内容
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 =解説

A 回答 (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
    • good
    • 2
この回答へのお礼

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

お礼日時:2003/01/26 00:12

こんばんは。


mo(i) は、Form_Load() の中で宣言していますよね。
そうすると、Form_Load() のプロシージャ内でなければ使えないんです。

エラーになったところは、next_Click()というイベントプロシージャの中ですよね。
なので、m(i)は配列変数ではなく、プロシージャ(sub)かファンクションの
呼び出しと解釈されてしまったんですね。(括弧がついているから)
(ここを消しても、この後の行で同じエラーが出るはずです)

ということで、解決方法ですが、
Dimの最初の行からReDimの最後の行までの部分をsubの前に出してください。
そうすれば、他のsubやFunctionからも扱えるグローバルな変数となります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/01/26 00:13

再び、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

といった感じです。

この回答への補足

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

補足日時:2003/01/25 01:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!