Pergunta

No código a seguir, recebo um erro de tempo de compilação porque i é tratada como uma variante. O erro é:. "ByRef tipo de argumento incompatível"

Mas se eu passar o ByVal parâmetros, não há erro por quê?

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
Foi útil?

Solução

ByVal autoconverts a variante em um número inteiro, porque ele está passando um valor. Enquanto o ByRef está tentando passar uma variável que pode ser modificado nas sub-rotinas. Em essência, eu é X no cenário ByRef. não VB6 não permite que você modifique uma variante como um inteiro.

Outras dicas

Quando você Dim diversas variáveis ??em uma única linha ou seja Dim i, j as Integer j é esmaecido como um inteiro, mas eu é uma variante. Você precisa declarar cada tipo de variável explicitamente. Eu prefiro incluir apenas uma única variável por linha.

Dim i As Integer, j As Integer

ou

Dim i As Integer
Dim j As Integer

Este é algo que eu aprendi quando eu herdei código de outro programador

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top