1

i次のコードでは、 がバリアントとして扱われるため、コンパイル時エラーが発生します。エラー: 「ByRef 引数の型が一致しません。」

しかし、パラメータを渡すと、ByValなぜエラーが発生しないのですか?

Private Sub Command2_Click()
    Dim i, j As Integer
    i = 5
    j = 7
    Call Swap(i, j)
End Sub

Public Sub Swap(ByRef X As Integer, ByRef Y As Integer)
    Dim tmp As Integer
    tmp = X
    X = Y
    Y = tmp
End Sub
4

2 に答える 2

6

1 行で複数の変数を Dim する場合、つまりDim i, j as Integerj は整数として淡色表示されますが、i はバリアントです。各変数の型を明示的に宣言する必要があります。私は、1 行に 1 つの変数のみを含めることを好みます。

Dim i As Integer, j As Integer

また

Dim i As Integer
Dim j As Integer

これは、他のプログラマーのコードを継承したときに学んだことです。

于 2009-07-08T20:39:58.800 に答える
3

値を渡すため、ByVal はバリアントを整数に自動変換します。ByRef が、サブルーチンで変更できる変数を渡そうとしている間。本質的に、私は ByRef シナリオの X です。VB6 では、バリアントを整数として変更することはできません。

于 2009-07-08T18:22:02.277 に答える