VBA - вложенные «с заявлениями» в «IF заявления» - PullRequest
0 голосов
/ 27 июня 2018

Язык: VBA - MS Access

Я использую пользовательские типы (UDT) в своем коде. Я хотел бы иметь возможность определить, в какой раздел UDT я загружаю данные на основе переменной состояния. Моей первой попыткой было использование операторов «With», вложенных в оператор «IF». Это не работает (я получаю ошибку компилятора, которая говорит, что иначе без if). Есть ли способ сделать эту работу? или другой способ использовать переменную состояния, чтобы определить, какой раздел UDT я загружаю?

Type MyOtherType
    Name as String
    Age as Integer    
End Type

Type MyType
    aMyOtherType() as MyOtherType
    X as Integer
    Y as Integer
    Z as Integer  
End Type

Sub QuestionableCode()
Dim UDT(0 To 0) as MyType
Dim State as String
ReDim Preserve UDT(0).X(0 to 0) as MyOtherType
ReDim Preserve UDT(0).Y(0 to 0) as MyOtherType
ReDim Preserve UDT(0).Z(0 to 0) as MyOtherType

    State = "B"

    If State = "A" Then
        With UDT(0).X(0)
    ElseIf State = "B" Then
        With UDT(0).Y(0)
    Else 
        With UDT(0).Z(0)
    End If
            .Name = "George"
            .Age = 30
        End With
End Sub

1 Ответ

0 голосов
/ 27 июня 2018

Вы не можете работать с With таким образом. Компилятор не допускает такого рода условно вложенный код. Ни с With, ни с For, ни с чем-либо еще.

Однако вы можете использовать переменную, чтобы определить, какое значение вы собираетесь использовать в вашем:

Sub QuestionableCode()
    Dim UDT(0 To 0) as MyType
    Dim State as String
    ReDim Preserve UDT(0).X(0 to 0) as MyOtherType
    ReDim Preserve UDT(0).Y(0 to 0) as MyOtherType
    ReDim Preserve UDT(0).Z(0 to 0) as MyOtherType

    State = "B"
    Dim myWithVariable
    If State = "A" Then
        myWithVariable = UDT(0).X(0)
    ElseIf State = "B" Then
        myWithVariable = UDT(0).Y(0)
    Else 
        myWithVariable = UDT(0).Z(0)
    End If
    With myWithVariable 
        .Name = "George"
        .Age = 30
    End With
End Sub
...