2017-10-12 2 views
0

ユーザーフォームのrefeditコントロールから指定された範囲をバリアント配列に渡そうとしています。私はUserFormのRefEditコントロールからバリアント配列に範囲を渡す

Private Sub CommandButton1_Click() 
    Dim y0 As Variant 
    Dim X0 As Variant 
    y0 = Range(RefEdit1.Value) 
    X0 = Range(RefEdit2.Value) 
    MsgBox (TypeName(y0)) 
    Call DataCheck 
    Me.Hide 
End Sub 

メッセージボックスが私を示し、私は試してみてください図のようなものをY0の寸法外またはプリントアレイのサブルーチンを使用して印刷するときにY0が、しかし、実際にバリアント()である:私は、次のコードを持っています(他の配列でも動作しています)、エラーメッセージが出ます。以下を参照してください:

Private Sub DataCheck() 
    'Check dimensions of original data 
    y0N = UBound(y0, 1) 
    y0k = UBound(y0, 2) 
    'X0N = UBound(X0, 1) - LBound(X0, 1) + 1 
    'X0k = UBound(X0, 2) - LBound(X0, 2) + 1 
    Debug.Print "N y0 = "; y0N 
    Debug.Print "k y0 = "; y0k 
    'Debug.Print "N y0 = "; X0N 
    'Debug.Print "k y0 = "; X0k 
End Sub 

「ランタイムエラー '13'」というメッセージが表示されます。私はこの文にカーソルを合わせるとまた、:

y0N = UBound(y0, 1)

私は型の不一致エラーが発生します。

ここで何が起こっているかについてのアイデアはありますか?いかなる援助も感謝します。

ベスト、

ダン

+2

あなたがサブDataCheckに変数 'x0'と' y0'を渡している場合は? –

+0

デバッグヘルプ(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。 [MCVE]と[ask]の作成方法をお読みください。 – tambre

答えて

0

はスコープへようこそ!

の先頭に モジュールを指定してください。 VBAはでy0,y0Nおよびy0Kが宣言されていないと不平を言わなければなりません。 - と別の範囲を定義各手順あなたが別のスコープでそれらにアクセスすることはできません。

二つの変数はCommandButton1_Clickスコープで、地元です。

実行時エラー13は誤解を招きます。 Option Explicitがないと、宣言されていない変数は、実行時にのオンザスポットで「宣言」され、でvbEmptyに初期化されるため、暗黙的にVariantとなります。 vbEmptyEmptyタイプであり、配列ではないので、UBoundはその処理を知らず、「そのタイプを期待していませんでした」という意味のエラーをスローします。

だから、代わりにパスパラメータに学ぶ必要がある - (指定されていない場合ByRefは暗黙的である)のアレイが参照によって渡されなければならないので、私は明示的にByRef修飾子を指定することをお勧めしたいことに注意してください:

Private Sub DataCheck(ByRef xArray As Variant, ByRef yArray As Variant) 
    '... 
End Sub 

そして今の代わり:

あなたが持っている
Call DataCheck 

DataCheck x0, y0 

Callキーワードは、20年前から廃止されてきた)

関連する問題