Ir ao conteúdo
  • Cadastre-se
Echeverria

Editar células de uma tabela do ACCESS via VBA

Recommended Posts

Olá pessoal, estou criando um gerenciamento de rotinas, sou iniciante na parte de VBA, mas estou me virando do jeito que dá.

Seguinte, tenho informações em uma tabela de access que é "carregada" no excel após o usuário realizar o login.
Agora preciso que estas informações voltem a tabela original com as alterações realizadas no excel.

Consegui realizar utilizando o RS.EDIT, mas sei criar apenas POR LINHA, ou seja vou ter q criar uma conexão com cada linha do excel e um RS.EDIT para cada linha, não sei como fazer o VBA entender a primeira e fazer as demais linhas abaixo da 11 irem automaticamente, alguém pode me ajudar ?

Segue código:

Sub Atualiza()

way = "" & (Plan2.Cells(1, 2)) & ""
caminho = "" & (way) & "" & (Plan2.Range("b2")) & "" 'Caminho do banco

'Variáveis

Ticket1 = Plan61.Range("A11")
Status1 = Plan61.Range("H11")
HI1 = Plan61.Range("E11")
HF1 = Plan61.Range("F11")
Dta1 = Plan61.Range("B11")


Set wks = DBEngine(0)
Set Db = wks.OpenDatabase(caminho)
Set RS = Db.OpenRecordset("SELECT * FROM [" & (Plan2.Range("B3")) & "] WHERE [Ticket] LIKE '" & (Ticket1) & "';") 'Referência, é o ticket com numeração automática que consta tanto no excel quanto no access.


RS.Edit
RS.Fields("Status") = Status1
RS.Fields("Hora Inicial") = HI1
RS.Fields("Hora Final") = HF1
RS.Fields("Data") = Dta1
RS.Fields("Data Atualização") = Format(Now, "dd/mm/yy")
RS.Fields("Hora Atualização") = Format(Now, "hh:mm:ss")


RS.Update

Db.Close


End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce precisa fazer um loop atualizando as linhas das celulas referenciadas.

tente alguma coisa assim:

Sub Atualiza()Dim rs As Recordsetway = "" & (Plan2.Cells(1, 2)) & ""caminho = "" & (way) & "" & (Plan2.Range("b2")) & "" 'Caminho do banco'VariáveisDim i As Long: i = 11Do While Plan61.Range("A" & i) <> ""Ticket1 = Plan61.Range("A" & i)Status1 = Plan61.Range("H" & 1)HI1 = Plan61.Range("E" & i)HF1 = Plan61.Range("F" & i)Dta1 = Plan61.Range("B" & i)Set wks = DBEngine(0)Set Db = wks.OpenDatabase(caminho)Set rs = Db.OpenRecordset("SELECT * FROM [" & (Plan2.Range("B3")) & "] WHERE [Ticket] LIKE '" & (Ticket1) & "';") 'Referência, é o ticket com numeração automática que consta tanto no excel quanto no access.rs.Editrs.Fields("Status") = Status1rs.Fields("Hora Inicial") = HI1rs.Fields("Hora Final") = HF1rs.Fields("Data") = Dta1rs.Fields("Data Atualização") = Format(Now, "dd/mm/yy")rs.Fields("Hora Atualização") = Format(Now, "hh:mm:ss")i = i + 1rs.UpdateDb.CloseLoopEnd Sub
* nao testado
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

voce precisa fazer um loop atualizando as linhas das celulas referenciadas.

tente alguma coisa assim:

Sub Atualiza()Dim rs As Recordsetway = "" & (Plan2.Cells(1, 2)) & ""caminho = "" & (way) & "" & (Plan2.Range("b2")) & "" 'Caminho do banco'VariáveisDim i As Long: i = 11Do While Plan61.Range("A" & i) <> ""Ticket1 = Plan61.Range("A" & i)Status1 = Plan61.Range("H" & 1)HI1 = Plan61.Range("E" & i)HF1 = Plan61.Range("F" & i)Dta1 = Plan61.Range("B" & i)Set wks = DBEngine(0)Set Db = wks.OpenDatabase(caminho)Set rs = Db.OpenRecordset("SELECT * FROM [" & (Plan2.Range("B3")) & "] WHERE [Ticket] LIKE '" & (Ticket1) & "';") 'Referência, é o ticket com numeração automática que consta tanto no excel quanto no access.rs.Editrs.Fields("Status") = Status1rs.Fields("Hora Inicial") = HI1rs.Fields("Hora Final") = HF1rs.Fields("Data") = Dta1rs.Fields("Data Atualização") = Format(Now, "dd/mm/yy")rs.Fields("Hora Atualização") = Format(Now, "hh:mm:ss")i = i + 1rs.UpdateDb.CloseLoopEnd Sub
* nao testado

 

 

Eu havia tentado algo parecido com isso mas apresentava erro, com o seu código não apresentou nenhum erro, mas as informações não estão sendo atualizadas no ACCESS. Tentei alterar o .Range, por .Cells, mas não atualiza igual. difícil de achar algo parecido com isso em outros fóruns.

 

Eu consigo fazer o loop para o inverso, no momento de trazer as informações do ACCESS para o EXCEL, agora na hora de retornar ao ACCESS estou quebrando a cabeça.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu costumo usar o adodb para atualizar dados no access desta forma, veja uim exemplo abaixo:

 

* Habilite a referencia indicada.

Sub Atualiza()'Habilite a Referencia Microsoft ctiveX Data objects X.X Library    Dim nConectar As String    Dim nConn As New ADODB.Connection    Dim nPath As String    Dim rs As ADODB.Recordset    way = "" & (Plan2.Cells(1, 2)) & ""    caminho = "" & (way) & "" & (Plan2.Range("b2")) & ""    'Caminho do banco    'Variáveis    Dim i As Long: i = 11    Do While Plan61.Range("A" & i) <> ""        Ticket1 = Plan61.Range("A" & i)        Status1 = Plan61.Range("H" & 1)        HI1 = Plan61.Range("E" & i)        HF1 = Plan61.Range("F" & i)        Dta1 = Plan61.Range("B" & i)        nConectar = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & caminho & ";"        nConn.Open        Set rs = New ADODB.Recordset        With rs            .Open "SELECT * FROM [" & (Plan2.Range("B3")) & "] WHERE [Ticket] LIKE '" & (Ticket1) & "';" & _                  ";", nConn, adOpenKeyset, adLockOptimistic        End With        'rs.Edit 'desabilitado        rs.Fields("Status") = Status1        rs.Fields("Hora Inicial") = HI1        rs.Fields("Hora Final") = HF1        rs.Fields("Data") = Dta1        rs.Fields("Data Atualização") = Format(Now, "dd/mm/yy")        rs.Fields("Hora Atualização") = Format(Now, "hh:mm:ss")        i = i + 1        rs.Update        Set rs = Nothing        nConn.Close    LoopEnd Sub

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

×