Página 1 de 1

Log de alterações

Enviado: 07 Out 2018 às 02:26
por JorgeLuisNeves
Pessoal que manja de VBA...tenho um codigo parar gerar o log das alterações, mas precisava registrar tb o valor antes da alteração
Segue codigo que estou utilizando


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim wsHist As Worksheet, Rng As Range
Set wsHist = Sheets("LogPlan")
If Sh Is wsHist Then Exit Sub
Set Rng = wsHist.Range("A" & Rows.Count).End(xlUp).Offset(1)
With Rng
.Value = Now
.Offset(, 1) = Sh.Name
.Offset(, 2) = Target.Address
If Target.Cells.Count > 1 Then
.Offset(, 3) = "Valores Alterados"
Else
.Offset(, 3) = Target.Formula
End If
End With
End Sub

Re: Log de alterações

Enviado: 07 Out 2018 às 13:55
por osvaldomp
Experimente:
Código: Selecionar todos
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Dim wsHist As Worksheet, Rng As Range, ant, atu
  Set wsHist = Sheets("LogPlan")
   If Sh Is wsHist Then Exit Sub
   atu = Target.Formula
    On Error Resume Next
    Application.EnableEvents = False
     Application.Undo
     ant = Target.Formula: If Target.HasFormula Then ant = "'" & Target.FormulaLocal
     Target.Value = atu: If Target.HasFormula Then atu = "'" & Target.FormulaLocal
    Application.EnableEvents = True
     On Error GoTo 0
      Set Rng = wsHist.Range("A" & Rows.Count).End(xlUp).Offset(1)
       With Rng
        .Value = Now
        .Offset(, 1) = Sh.Name
        .Offset(, 2) = Target.Address
         If Target.Cells.Count > 1 Then
          .Offset(, 3) = "Valores Alterados"
         Else
          .Offset(, 3).Value = ant
          .Offset(, 4).Value = atu
         End If
       End With
End Sub

Re: Log de alterações

Enviado: 28 Out 2018 às 18:35
por VictorMota
Boa Noite Osvaldomp,
O Código que disponibilizou me ajudou muito, porém ainda falta um ponto.
Como eu faço para retornar também o nome ou registro de usuário logado (que fez a alteração)
Obrigado!!

Re: Log de alterações

Enviado: 28 Out 2018 às 21:06
por osvaldomp
O comando abaixo retorna o nome do usuário que logou na máquina, que pode não ser o mesmo que carregou o Excel que pode não ser o mesmo que fez as alterações.
Para detectar quem carregou o Excel e quem fez alterações aí você precisa restringir acessos com uso de senhas.
Código: Selecionar todos
.Offset(, 3) = Environ("USERNAME") 'usuário que logou na máquina