2016-08-07 11 views
0

IFステートメント内で配列の大きさを変更する配列を宣言しようとしていますが、コードを実行すると重複エラーが発生します。IFステートメント内の変数の重複除外VBA

If ZoneComboBox.Value = "Zone 1" Then 
     Dim spaces(1 To 5, 1 To 2) As String 
     spaces(1, 1) = "ROOM 1"  
     spaces(1, 2) = "JOE" 
     spaces(2, 1) = "ROOM 2"  
     spaces(2, 2) = "PAUL" 
     spaces(3, 1) = "ROOM 3"  
     spaces(3, 2) = "JOE" 
     spaces(4, 1) = "ROOM 4"  
     spaces(4, 2) = "PAUL" 
     spaces(5, 1) = "ROOM 5"  
     spaces(5, 2) = "PAUL" 
    End If 
    If ZoneComboBox.Value = "Zone 2" Then 
     Dim spaces(1 To 6, 1 To 2) As String 
     spaces(1, 1) = "SPACE 1"  
     spaces(1, 2) = "JOE" 
     spaces(2, 1) = "SPACE 2"  
     spaces(2, 2) = "JOE" 
     spaces(3, 1) = "SPACE 3"  
     spaces(3, 2) = "JOE" 
     spaces(4, 1) = "SPACE 4"  
     spaces(4, 2) = "JOE" 
     spaces(5, 1) = "SPACE 5"  
     spaces(5, 2) = "JOE" 
     spaces(6, 1) = "SPACE 6"  
     spaces(6, 2) = "JOE" 
    End if 

私は部屋/スペースを所有しているが、私は私がこれをやっているどのようにエラーが表示されていない人を追加するためにそれに第二の次元を追加する前に、それは働いていました。皆さんのご協力ありがとうございます。

+3

VBAではスコープが機能しません。 2番目の 'If'ブロックで' spaces'の代わりに別の変数名を使うか、 'REDIM PRESERVE'ステートメントを使って既存の' spaces'配列を再割り当てするというオプションがあります。 – dlatikay

+0

'' f 'の前の'文字列としての空白() '。そして、 'then'と' else'の内部では、 'redim spaces(1から...、1から...)'は残しますが、WITOUTは保存します!あなたがやっている間違いは、あなたが私に商品を売ってみるのと同じものを、他の人に私のものと同じ商品を販売しようとするようなものです。 –

答えて

2

あなたができることは、Ifブロックの上のスペースを薄くし、IFブロック内でRedim spaces(...)を使用することです。

なぜ、同じフィールドを比較するときに、別々のIFブロックを使用するのですか?以下は、あなたが欲しいものをより丁寧にしてくれます。

Option Explicit 

Sub SO38818662(Z As String) 
    Dim spaces() As String 
    Select Case Z 
     Case "Zone 1" 
      ReDim spaces(1 To 5, 1 To 2) 
      spaces(1, 1) = "ROOM 1" 
      spaces(1, 2) = "JOE" 
      spaces(2, 1) = "ROOM 2" 
      spaces(2, 2) = "PAUL" 
      spaces(3, 1) = "ROOM 3" 
      spaces(3, 2) = "JOE" 
      spaces(4, 1) = "ROOM 4" 
      spaces(4, 2) = "PAUL" 
      spaces(5, 1) = "ROOM 5" 
      spaces(5, 2) = "PAUL" 
     Case "Zone 2" 
      ReDim spaces(1 To 6, 1 To 2) 
      spaces(1, 1) = "SPACE 1" 
      spaces(1, 2) = "JOE" 
      spaces(2, 1) = "SPACE 2" 
      spaces(2, 2) = "JOE" 
      spaces(3, 1) = "SPACE 3" 
      spaces(3, 2) = "JOE" 
      spaces(4, 1) = "SPACE 4" 
      spaces(4, 2) = "JOE" 
      spaces(5, 1) = "SPACE 5" 
      spaces(5, 2) = "JOE" 
      spaces(6, 1) = "SPACE 6" 
      spaces(6, 2) = "JOE" 
    End Select 
End Sub 
+0

私はLCaseまたはUCaseを渡される値に使用していたかもしれませんが(大文字と小文字を区別した比較で誤った値の問題を取り除くために)、これは正しい考えです。 – Jeeped

関連する問題