2017-11-01 11 views
0

私のプロジェクトでは、配列をたくさん扱っています。一つの関数(配列)の戻り値を別の新しく宣言された配列に割り当てる方法を探したいと思います。検索して、配列を分割して別の配列に再結合する方法を見つけましたが、この要件をより正確に処理したいと思います... 値を返す関数を次のようにします:一つの配列をvba内の別の配列に代入する

Public Function GetVariables() As String() 
Dim Vars() As String 
GetVariables = Vars  
End Function 

し、それを使用して機能:

Public Function popu() 
    Dim Vars() As String 
    Set Vars = GetVars() 
End Function 

が、これは私にエラーを与える:

can not assign to array 

私はあなたの誠実な助けの非常に感謝されます。

+2

代わりに、「バリアント」を吐き出して使用してください。 – Bathsheba

+0

1.文字配列を設定しないでください。 2. ^^^^^ 3. 'GetVars' <>' GetVariables' –

+2

'Set'キーワードを削除します。オブジェクト用です。 –

答えて

1

あなたはここで間違ったいくつかのことをやっています。まず、他の人がコメントに記しているように、SetObjectという変数を割り当てるための特別なキーワードであるため、Setはここでエラーを引き起こします。

次に、関数呼び出しに適切な戻り値を正しく割り当てる必要があります。現在のコード:

Public Function popu() 
    Dim Vars() As String 
    Set Vars = GetVars() 
End Function 

4つのことが間違っていますか。

  • Vars()Vars()に等しくありません。

  • GetVars()あなたは関数呼び出しに空の括弧を含めるべきではありませんPublic Function GetVariables()

  • と同じではありません。

  • 配列は、Variantと宣言する必要があります。文字列配列を作成する配列をString()として宣言できますが、これは一般的に避けられます。さらに、変数をVariant()として宣言することもできますが、null値(たとえば、vbNullString、またはEmptyなど)を返そうとすると問題が発生します。

したがって、あなたのコードは次のようになります。ポールは彼の答えに実証したよう

Public Function GetVariables() As Variant 
    Dim Variables As Variant 
    GetVariables = Variables 
End Function 

' Make sure your function has an explicit returntype, even if that return is variant. 
Public Function popu() as Variant 
    Dim Variables As Variant 
    Variables = GetVariables 
End Function 

、あなたの配列は、次元あらかじめ定義されてインスタンス化することができ、あなたの配列に値をハードコーディングすることができます。あなたのアプリケーションにはまったく依存しますが、配列のドキュメントを読んで、それらを作成するためのさまざまな使い方や方法を理解したいと思うでしょう。

2

あなたの関数/サブのより精巧な例として:

Public Function GetVariables() As String() 
    Dim Vars() As String 
    ReDim Preserve Vars(2) 
    Vars(1) = "hello" 
    Vars(2) = "world" 
    GetVariables = Vars 
End Function 

Public Function popu() 
    Dim Vars() As String 
    Dim i 
    Vars = GetVariables() 
    For i = 1 To UBound(Vars) 
     Debug.Print Vars(i) 
    Next i 
End Function 

プリント

hello 
world 
+0

答えに感謝しますが、関数の最初の配列は動的です。 – user3786134

+0

最初の配列はどのように構築されていますか?最初の配列が動的であると言っているときは、どの時点で2番目の配列を作成する必要があると判断していますか? –

+0

配列が動的な場合は違いはありません。私は動的配列を使ってこの例を修正しました。 –

関連する問題