Ola Luiz;
Amigão, eu não consigo testar dessa forma, porque não tenho registro nesse site, mas na pagina principal o código coloca lá o CPF e a senha e faz OK automaticamente, ou seja até ae tudo a funfar...
Não utilize a API apiShowWindow ie.hwnd, SW_MAXIMIZE
Essa api pode estar a interferir com o funcionamento, então faça todos os testes primeiramente sem essa api, poque ela usa recursos como o, Lib "user32" Alias "ShowWindow".
Use o .Value para identificar que é o conteudo do seu campo, exemplo:
ie.Document.All("j_username").Value = Me.CNPJ.Value
ie.Document.All("j_password").Value = Me.Senha.Value
Respondendo às suas perguntas:
1º O Set ie = Nothing, faz com que limpe o que ficou em memoria, tal como se faz ao fechar um recordset.
As restantes, são retiradas da ajuda do Access, professor Microsoft:
Instrução While...Wend
Executa uma série de instruções desde que uma determinada condição seja True.
Sintaxe
While condition
[statements]
Wend
A sintaxe da instrução While...Wend possui as seguintes partes:
Parte Descrição
condition Obrigatória. Expressão numérica ou expressão de seqüência que avalia como True ou False. Se condition for Null, ela será tratada como False.
statements Opcional. Uma ou mais instruções executadas enquanto a condição for True.
Comentários
Se condition for True, todas as statements serão executadas até que a instrução Wend seja encontrada. Então o controle retorna para a instrução While e condition é novamente verificada. Se condition ainda for True, o processo é repetido. Se não for True, a execução continua com a instrução seguinte à instrução Wend.
Os loops While...Wend podem ser aninhados a qualquer nível. Cada Wend corresponde ao mais recente While.
Dica A instrução Do...Loop fornece um meio mais estruturado e flexível para executar um loop.
.............................................................................................................
ie.Busy = enquanto o internet explorer estiver ocupado
.............................................................................................................
Função DoEvents
Cede o controle da execução para que o sistema operacional possa processar outros eventos.
Sintaxe
DoEvents( )
Comentários
A função DoEvents retorna um Número inteiro que representa o número de formulários abertos em versões autônomas do Visual Basic, como o Visual Basic, Professional Edition. DoEvents retorna zero a todos os outros aplicativos.
DoEvents passa o controle para o sistema operacional. O controle é retornado depois que o sistema operacional conclui o processamento dos eventos da sua fila e todas as chaves da fila SendKeys terem sido enviadas.
DoEvents tem uma maior utilidade com ações simples como permitir que um usuário cancele um processo após ter sido iniciado, por exemplo, uma procura por um arquivo. Para processos de longa execução, o controle do processador é conseguido com maior facilidade usando-se um cronômetro ou delegando-se a tarefa a um componente ActiveX EXE. Nesse último caso, a tarefa pode continuar de forma completamente independente de seu aplicativo e o sistema operacional considera a multitarefa e a divisão de tempo.
Atenção Sempre que você ceder temporariamente o processador dentro de um procedimento do evento, certifique-se de que o procedimento não seja executado novamente a partir de uma parte diferente do seu código antes que a primeira chamada retorne, pois isto pode causar resultados imprevisíveis. Além disso, não use DoEvents se houver possibilidade de outros aplicativos interagirem com o seu procedimento de forma imprevisível quando você cedeu o controle.
.............................................................................................................