REGISTRO DE CÉLULA DO EXCEL RETORNA 0 NO ACCESS
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
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
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!
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!
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
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
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!
Qual banco de dados está sendo conectado?
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
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
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!
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