Ir ao conteúdo
  • Cadastre-se
Aron Gerd Ristow Filho

Excel RESOLVIDO Erro de conexão Excel x Access

Posts recomendados

Bom dia,

 

estou tentando criar um banco de dados do meu excel com o Access, porém fica dando erro ao executar o comando

 

Private Sub CMDsalvar_Click()

Sheets("Coleta de dados").Select

Cells(12, 3) = TextBox1
Cells(13, 3) = TextBox2
Cells(14, 3) = TextBox3
Cells(15, 3) = TextBox4

For Each Cell In [C12:C15]
       If Cell > "" Then
       numero = Str(Cell.Value)
       Cell.Activate
      ActiveCell.FormulaR1C1 = numero
    
  Else
  End If
  Next

Dim adoconexao As New ADODB.Connection
Dim rsincluir As New ADODB.Recordset
Dim banco As String

banco = "C:\Users\aristow\desktop\CEP_BC58.accdb"

adoconexao.ConnectionString = "provider = Microsoft.ACE.OLEDB.12.0; Data Source = " & banco & "; Persist Security info=False;jet oledb:DataBase password="

adoconexao.Open

planilha = "select * from CEP_BC58"

rsincluir.Open "Coleta de valores", adoconexao, adOpenKeyset, adLockOptimistic

rsincluir.AddNew

rsincluir!nome = Cells(8, 3)
rsincluir!data = Cells(9, 3)
rsincluir!Hora = Cells(10, 3)
rsincluir!Coleta1 = Cells(12, 3)
rsincluir!Coleta2 = Cells(13, 3)
rsincluir!Coleta3 = Cells(14, 3)
rsincluir!Coleta4 = Cells(15, 3)
rsincluir!XBarra = Cells(16, 3)
rsincluir!RBarra = Cells(17, 3)

rsincluir.Update
rsincluir.Close
adoconexao.Close

ActiveSheet.Protect Password:="1"

ThisWorkbook.Save

End Sub

Esse é o código que estou usando, e fica dando erro de "DELETE", "PROCEDURE"... eu estava usando sem banco de dados, apenas estava bloqueando a planilha, entao os funcionários começaram a falar que eles poderiam lançar numeros enganados ou digitar algo errado sem querer e pediram para nao bloquear mais as planilhas, entao preciso criar um banco de dados, e já que nao consegui bloquear apenas uma aba do excel, decidi linkar o excel com o access.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo.

 

 

Poderia me explicar por favor o que essa parte do seu código faz?

 

For Each Cell In [C12:C15]
       If Cell > "" Then
       numero = Str(Cell.Value)
       Cell.Activate
      ActiveCell.FormulaR1C1 = numero
    
  Else
  End If
  Next

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Charley Rochaconverte o intervalo de células vazias em string. 

@Aron Gerd Ristow Filho experimente

 

rsincluir.Open planilha, adoconexao, adOpenKeyset, adLockOptimistic

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Basole disse:

@Charley Rochaconverte o intervalo de células vazias em string. 

 

Mas a condição do IF não é se a célula não for vazia?? Como eu estou aprendendo, na minha concepção essas linhas estão pegando as células não-vazias, botando em uma string, e depois colocando de volta na célula de onde ela veio. (???)

 

Não é isso não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por default o banco de dados access não aceita registro nulos, a conversão é justamente para não gerar erros. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Charley Rocha Essa parte do comando é para converter os valores inseridos na textbox em números, pois os funcionarios da empresa lançam nas textbox ",019" e na planilha as células nao estavam dando como números, e para executar os calculos de X e R eu preciso que sejam números. @Basole é isso ai mesmo, valeu man, mas agora tenho uma outra dúvida.

adicionado 3 minutos depois

@Basole sempre que eu abro uma planilha nova no excel, a mesma vem com as 4 referencias padrões do excel ativada, segue print : image.png.173a41f7c6c2e4967e6841159ac8eaf3.png

 

só que para eu linkar o excel X Access e para mais algumas tarefas, eu preciso de mais algumas referencias:

 

image.png.69494aec2686972170459585b432739e.png

 

minha questão é: Eu consigo tornar como padrão toda a planilha que eu abro vir com essas referencias ativadas?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Aron Gerd Ristow Filho eu nao conheco uma forma de tornar padrão essas referenicas. o que voce pode fazer e "marcar" as referencias programaticamente. aqui tem um link com exemplo. How to change the default vba references in excel 2010

 

Mas eu particularmente nao gosto trabalhar com as referencias, pois quando voce roda uma macro em uma versao diferente do Excel apresenta erros, por exemplo marca a referencia no excel 14.0 e vai rodar no Excel 15.0. 

Eu prefiro criar o objeto, fazer as operacoes, em seguida destruir.

Ex.

 

Dim adoconexao As Object
Dim rsincluir As Object
Dim adOpenKeyset: adOpenKeyset = 1
Dim adLockOptimistic: adLockOptimistic = 3

Set adoconexao = VBA.CreateObject("ADODB.Connection")
Set rsincluir = VBA.CreateObject("ADODB.Recordset")

----------------------------------------
rsincluir.Open planilha, adoconexao, adOpenKeyset, adLockOptimistic
----------------------------------------
----------------------------------------
----------------------------------------

Set adoconexao = Nothing
Set rsincluir = Nothing

* Desta forma nao apresenta erros de incompatibilidade

* E neste caso de conectar com o access nenhuma referencia de biblioteca é neccessária ser marcada.

 

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

ebook grátis "Aprenda a ler resistores e capacitores", de Gabriel Torres

GRÁTIS! BAIXE AGORA MESMO!