2017-02-07 11 views
2

私はここで何が間違っていますか?配列の引数はByRefでなければなりません

Sub Main() 

Dim patients() As String 

' Some code to populate the patients array, works fine 

CalculateScores (patients) ' Array argument must be ByRef compile error 

End Sub 



Sub CalculateScores(patients As String) 

End Sub 

私がメインとそれが正常に動作しますが、私は文字列を渡すことができないというロジックを見ることができないCalculateScoresのパラメータのバリアント配列に患者を変更した場合。デフォルトではByRefなので、私は何かが欠けていることを知っています。

私は変種を使用することはできますが、それはハッキリと感じます。

+2

'patients'パラメータは、スターターの配列ではありません。 – Comintern

+1

それは質問のタイプミスであれば、[括弧を削除する]必要があります(http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/this-is-confusing-why-not-just 'CalculateScores'呼び出しから' -always-use-parentheses'):CalculateScores patients' – Comintern

+1

@Cominternが何を言ったかを明確にするために、 'CalculateScores'は文字列の配列ではなく、実際のStringを期待しています。 – R3uK

答えて

2

あなたはこれを行うとき:

DoSomething (expression) 

あなたはexpressionを強制しているが、値としてを評価され、関係なく、パラメータが明示的にそれが BYREF渡されたと言うかどうかのByValを渡されます。ほとんどの場合、それはほとんど影響を与えませんが、配列やオブジェクト参照を渡そうとすると、後端に噛み付きます。

括弧を削除します。今

DoSomething expression 

、あなたのコードを持つ他の問題があります:あなたはStringパラメータに文字列の配列を渡しています。それはうまくいかない。パラメータを配列またはVariantにしてください。明確にするため、パラメータを明示的にByRefとマークすることをお勧めします。

+0

ありがとうございます。他のものを明確にするために、私のパラメータは文字列ではなく、MatのMugが示唆するようにstring()であったはずです。 – Absinthe

関連する問題