4

C/CPP/CSharp/JScript のように、VBA でチェーン割り当てを行うにはどうすればよいですか? つまり、VBA には代入演算子の右結合性がありますか?

たとえば、C-sharp と JavaScript では、次を使用できます。

var alpha, bravo, charlie;
alpha = bravo = charlie = "hello";

この式を VBA で記述するには、次のことを行う必要があります。

Dim alpha, bravo, charlie
alpha = "hello"
bravo = "hello"
charlie = "hello"

ただし、次のものは使用できません。

Dim alpha, bravo, charlie
alpha = bravo = charlie = "hello"

VBA では、式を折りたたむことができません。それを行う他の方法はありますか?

4

4 に答える 4

5

いいえ、VBA には代入演算子の右結合性がありません。ただし、VBA には、他の論理演算子に対する右結合性または連鎖操作があります。次の式を検討してください。

alpha = 3
bravo = 5
charlie = 4

alpha = bravo < charlie

MsgBox(alpha) 'would display false

alpha = 3
bravo = 5
charlie = 4

alpha = bravo > charlie < alpha

MsgBox(alpha) 'would display ture .. because (bravo > charlie) is true 
                                      'and true (or 1) less than alpha

ただし、VBA インタープリターは代入演算子よりも比較演算子を優先し、両方とも で表され=ます。つまり、

alpha = bravo = "hello"
MsgBox(alpha) 'would display false, because bravo <> "hello"

したがって、割り当てには複数のステートメントを明示的に使用する必要があります。

于 2012-07-20T04:20:23.053 に答える
1

以下の割り当て関数の代わりに、使用します

Public Sub Assign(ParamArray varsAndValue() As Variant)
    Dim idx As Long
    Dim value As Variant

    If UBound(varsAndValue) < 1 Then
        Err.Raise 999, "Invalid call to «Assign»: Last argument should be the value to set, first upto one but last should be the variables"
    ElseIf UBound(varsAndValue) < 2 Then
        Err.Raise 999, "Why don't you use a normal assignment when you only need to assign one variable?"
    Else
        value = varsAndValue(UBound(varsAndValue))
        For idx = 0 To UBound(varsAndValue) - 1
            varsAndValue(idx) = value
        Next idx
    End If
End Sub
于 2013-07-10T13:49:57.227 に答える
0

次のような関数でいつでも実行できます。

Private Function assign(var As Variant, value As Variant) As Variant
    var = value
    assign = value
End Function

Private Sub Form_Load()
    Dim alpha, bravo, charlie
    Call assign(alpha, assign(bravo, assign(charlie, "hello")))
    Debug.Print alpha, bravo, charlie
End Sub

...しかし、それはすぐに醜くなります。

于 2012-07-20T11:34:03.987 に答える
0

やりたいという意味ではありません。この質問は、機能が VB.net にも存在しないことを示しています。

書かれているように、VBA は左端の = 記号を使用して、比較のためにアルファとその他すべてに値を割り当てます。

一度に複数の変数を割り当てる唯一のオプションは、配列を使用することです。

これらの例はhereから来ています

Dim myarray As Variant

myarray = Array("Cat", "Dog", "Rabbit")

また

Dim MyStringArr() As String
MyStringArr = Split("Text1,Text2,Text3", ",")
于 2012-07-20T04:13:10.770 に答える