O que a palavra-chave Call faz no VB6?

Há algum código em nosso projeto que parece um pouco com isso:

Private Sub Method1() Call InnerMethod End Sub Private Sub Method2() InnerMethod End Sub Private Sub InnerMethod() '' stuff End Sub 

Qual é a vantagem de fazer o Method1 sobre o Method2?

Do MSDN :

Você não é obrigado a usar a palavra-chave Call ao chamar um procedimento. No entanto, se você usar a palavra-chave chamada para chamar um procedimento que requer argumentos, argumentlist deve ser colocado entre parênteses. Se você omitir a palavra-chave chamada, você também deve omitir os parênteses ao redor da lista de argumentos. Se você usar a syntax Call para chamar qualquer function intrínseca ou definida pelo usuário, o valor de retorno da function será descartado.

Por exemplo:

 Sub Proc1() Debug.Print "Hello World" End Sub Sub Proc2(text As String) Debug.Print "Hello " & text End Sub 

Na janela imediata, se você digitar

 Proc1 

então “Hello World” é impresso. Se você entrar

 Call Proc1 

então “Hello World” é impresso. Se você entrar

 Proc2 "World" 

então “Hello World” é impresso. Se você entrar

 Call Proc2 "World" 

você recebe um erro de compilation. Você teria que entrar

 Call Proc2("World") 

Chamada não faz nada especial além de chamar o método. É uma ressaca dos velhos tempos do Basic quando todas as linhas tinham que começar com uma palavra-chave. “Let” é outra dessas palavras-chave, que sempre foi colocada antes de uma atribuição, mas não é mais necessária.

Method1 e Method2 fazem exatamente a mesma coisa.

Eu encontrei uma grande diferença sobre a palavra-chave ‘call’ com funções que têm, ByRef Arguments (eu encontrei isso no editor MS-Access VBA). Se você estiver chamando a function sem a palavra-chave ‘Call’, ByRef aruments não será configurado para o calle. Por ex:

 Private Function Test(Optional ByRef refArg As String) As Boolean refArg = "Test" Test = True End Function 

Se você chamar a function sem a palavra-chave Call como

 Dim a As String Test(a) 

a será uma string vazia, depois que a chamada retornar

Se você chamar a function com a palavra-chave Call como

 Dim a As String Call Test(a) 

a conterá a string Test

A explicação detalhada fornecida no seguinte link: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx

Não há diferença.

Aqui está um post que descreve quando você precisa usar a chamada vs não usá-lo e quando parênteses em torno de seus parâmetros.

Você também pode ler mais sobre a chamada no MSDN. Essencialmente, a principal diferença é que quando você usa a chamada para chamar uma function, não pode acessar o valor de retorno.