プロが教えるわが家の防犯対策術!

VBAで、「For ループが初期化されていません」エラーが発生します。
動的配列が要素0の時に発生するようです。
動的配列の要素が生成された場合だけ、Forループしたいのですが、
どうやって判定すればよいのでしょうか?
-------------------------------
Dim 配列() As Integer
Dim i As Integer
i = 0
If (i < 0) Then ' 本当は真になったり偽になったり
ReDim 配列(0 To i)
配列(i) = a + b
i = i + 1
End If

'' if ★★★ then '' 配列が有るか確認
For Each c In 配列
MsgBox c
Next
'' end if
-------------------------------

A 回答 (3件)

こんにちは。



動的配列の要素が生成された時だけ、For ~Loop するなら、#2 さんのご指摘のように、動的配列を生成したときに、フラグを立てるのが一番簡単ですね。配列変数を、Integerと最初から宣言してしまっていますから、それ自体が変化したことを、値を取り出す方法以外には、チェックできませんね。

以下は未知の変数の配列を調べる場合、VBAでは以下のような方法を使います。

 On Error Resume Next
 dummy = 配列(0)
 Err.Clear  'プロシージャ内で、使いまわしする場合は、必要
 On Error GoTo 0
 If dummy <> Empty Then
  For Each c In 配列
   MsgBox c
  Next
 End If
 dummy = Empty 'dummy を使いまわしする場合は、一旦空にする。
    • good
    • 1
この回答へのお礼

皆さんありがとうございます!
非推奨とわかるだけでも大変助かります。ありがとうございました!

お礼日時:2005/08/16 19:54

ベタなやり方ですが、


仮にフラグ=Falseとしておいて、
>If (i < 0) Then
↑ここを通った時にフラグ=True

んで、
If フラグ=True Then
For ループ …
    • good
    • 1

こんにちは、じゃんぬねっと です。



VB6 までは配列自体に Nothing (null) という概念がないため、
要素の最大が 0 ならば null ということにしておく仕様が 1 番無難かと思います。

裏技チックに判断する方法はありますが、VB ではあまりお勧めできないです。
    • good
    • 0
この回答へのお礼

こんにちわ。じゃんぬねっとさん。素早いご回答ありがとうございます!
非推奨とわかるだけでも大変助かります。ありがとうございました!

お礼日時:2005/08/16 19:53

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A