2016-08-07 6 views
0

Also ich versuche, ein Array innerhalb einer IF-Anweisung zu deklarieren, die ändern wird, wie groß es abhängig von der Bedingung ist, aber ich erhalte einen doppelten Fehler, wenn ich den Code ausführen.Doppelte Delcaration der Variablen in IF-Anweisung 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 

Es arbeitet, bevor ich die zweite Dimension hinzugefügt hinzuzufügen, die den Raum/Raum besitzt, aber ich sehe keinen Fehler, wie ich dies tue. Danke für jede Hilfe, die ihr zur Verfügung stellen könnt.

+3

Scope funktioniert nicht so in VBA. Ihre Optionen bestehen darin, im zweiten 'If'-Block einen anderen Variablennamen anstelle von' spaces' zu verwenden oder die 'REDIM PRESERVE'-Anweisung zu verwenden, um das vorhandene' spaces'-Array neu zuzuweisen. – dlatikay

+0

'Dim Spaces() als String' vor dem 'ìf'. Und dann innerhalb des 'then' und' else', 'redim spaces (1 bis ..., 1 bis ...)' aber WITOUT bewahren! Der Fehler, den du machst, ist, als ob du versuchst, mir einen Gegenstand zu verkaufen und dann den gleichen Gegenstand, der mir gehört, an eine andere Person zu verkaufen. –

Antwort

2

Sie können die Leerzeichen über den If-Blöcken abdunkeln und innerhalb der IF-Blöcke Redim spaces(...) verwenden.

Warum verwenden Sie jedoch separate IF-Blöcke, wenn Sie das gleiche Feld vergleichen? Unten ist, was Sie in einer besseren Weise wollen:

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

Ich könnte LCase oder UCase für den übergebenen Wert verwendet haben (um Probleme mit falsch eingegebenen Werten zu vermeiden), aber das ist sicherlich die richtige Idee. – Jeeped

Verwandte Themen