REGISTRO DE CÉLULA DO EXCEL RETORNA 0 NO ACCESS

HUCSANTOS 27/04/2016 13:11:59
#461517
Pessoal, Bom Dia !

Sou novo aqui no Fórum, ultimamente tenho trabalhado bastante com demandas de automatização em planilhas de Excel.

Estou com o seguinte problema:

Criei uma planilha com uma interface simples onde os valores de algumas células serão atualizadas como novos registros em um Banco de Dados Access, porém ao verificar os valores das variáveis, os valores estão aparecendo como 0, ou 00:00:00 horas e 30/12/1899 para datas, sendo que os registros nas células do excel estão preenchidas corretamente e devidamente formatadas.

A única variável que traz corretamente é a informação do usuário que eu pego ObjNetwork.UserName, todas as demais vindas do Excel, vem com valores zerados.

Aparentemente o conexão com o Banco de Dados esta funcionando corretamente, pois os valores estão sendo registrados.

Utilizo o seguinte código para associar as informações;

Dim vdata As Date
Dim vOR As Integer

vOR = Sheets([Ô]Formulario[Ô]).Range(D5).Value
vdata = Sheets([Ô]Formulario[Ô]).Range(D3).Value

........

objRecordSet.AddNew
objRecordSet([Ô]OR[Ô]) = vOR
objRecordSet([Ô]Data[Ô]) = vdata



Se alguém tiver uma luz para me ajudar !!!

Obrigado

Hugo Santos
DS2T 27/04/2016 14:43:55
#461520
Já colocou um breakpoint pra verificar se as variáveis estão recebendo um valor apropriado realmente?

A variável vdata está realmente com um valor válido?
Outra coisa que eu recomendo, é sempre usar a conversão explícita. Cint, Cdate...

Se não der certo, tente fazer o Insert Into na mão... se não quiser, e continuar indo pelo AddNew... tente usar outro provedor pro seu banco de dados. Já tentou usar o ODBC - Microsoft Access Driver?

Abraços!
HUCSANTOS 28/04/2016 08:48:05
#461565
Então, fiz testes para exibir as variáveis em uma msgbox por exemplo, e os valores apareciam zerados mesmo.
Substitui o código e funcionou, não sei exatamente porque.

vOR = Sheets([Ô]Formulario[Ô]).[txt-color=#e80000]Range(D5).Value[/txt-color]
por
vOR = Sheets([Ô]Formulario[Ô]).[txt-color=#e80000]Cells(5, 7).Value[/txt-color]

Agora esta funcionando corretamente, porém quando digito um valor esta exibindo alguns erros com a mensagem [Ô]Estouro[Ô], mas estou pesquisando pois acho que tem haver com o relação com o Banco de Dados.

Mais uma dúvida em relação este código; Quando executo o código para inserir os novos dados no Banco, se por algum motivo gera erro, ele interrompe a execução porém fica travado até que um Stop seja clicado no VBA.

Como posso tratar isso, tentei com [Ô]On error Resume Next[Ô], porém ele executa o código ignorando os erros, não garantindo que os dados foram registrados.

Obrigado
DS2T 28/04/2016 11:36:53
#461582
Citação:

Substitui o código e funcionou, não sei exatamente porque.

vOR = Sheets([Ô]Formulario[Ô]).Range(D5).Value
por
vOR = Sheets([Ô]Formulario[Ô]).Cells(5, 7).Value



Porque você antes tava pegando o valor da célula D5, agora está pegando o valor da célula G5 (linha 5, coluna 7).


Citação:

Agora esta funcionando corretamente, porém quando digito um valor esta exibindo alguns erros com a mensagem [Ô]Estouro[Ô], mas estou pesquisando pois acho que tem haver com o relação com o Banco de Dados.



Esse estouro significa que a variável/campo que você tá tentando armazenar esse valor é pequeno demais pra ele. (Exemplo: Tentando adicionar um inteiro de 64 bits num campo inteiro de 32).


Citação:

Mais uma dúvida em relação este código; Quando executo o código para inserir os novos dados no Banco, se por algum motivo gera erro, ele interrompe a execução porém fica travado até que um Stop seja clicado no VBA.

Como posso tratar isso, tentei com [Ô]On error Resume Next[Ô], porém ele executa o código ignorando os erros, não garantindo que os dados foram registrados.



Você pode usar On Error ... Go to... ou continuar usando On Error Resume Next verificando se a propriedade Err.Number é diferente de zero (se for, sinal que rolou erro).

Abraços!
MARIOANDRADE 28/04/2016 11:52:48
#461585
Qual banco de dados está sendo conectado?
HUCSANTOS 02/05/2016 15:46:35
#461768
Barra,

Obrigado pelas orientações, os fatos eram estes mesmo tanto do Range quando do Estouro.
Agora estou estudando melhor a tratativa de erros.

Só mais um ponto em relação ao código, consigo definir variáveis de forma a chamar elas em qualquer bloco de código, Sub ou Private sub.

Por exemplo: String de Conexão, Caminho do banco de Dados, Constantes pode exemplo, para não ter que escrever a linha de código que encerra sessão com o banco todo momento.

Abraços
HUgo
DS2T 03/05/2016 22:05:58
#461814
Sim, basta declará-las como Public em um módulo.
Mas recomendo que crie uma classe encapsulada para abrir a conexão toda vez que precisar, mas sem precisar de toda essa quantidade de código.

Abraços!
Faça seu login para responder