Ir ao conteúdo
  • Cadastre-se

Controle de Alterações Log Excel


Posts recomendados

Bom dia Pessoal

 

Gostaria de um auxilio de vocês tenho uma planilha feita no Excel que vários funcionários usam através da rede salva no meu computador, gostaria de uma ajuda para criar uma macro onde fosse possível salvar um log para todas as alterações realizadas na planilha, gostaria que ela me retornassem com o usuário da rede que alterar a célula, os dados da células anterior da alteração data e hora da alteração, alguém já possui uma planilha com uma macro pronta para realizar este controle?

 

Desde já agradeço a Atenção de vocês.

 

Obrigado

Link para o comentário
Compartilhar em outros sites

Olá davison, seja bem vindo a bordo. 

 

Esse controle de log é possivel atraves do vba, mas lembre-se se o usuário ao abrir a pasta de trabalho, desabilitar a macro, o codigo vba não agir e registrar os 'passos' deste usuario. O importante é voce criar um certificado de assinatura digital para esta pasta de... e configurar o excel para habilitar as macros 'tomaticamente' nesta condilção ai dependendo do nivel de conhecimento, não consiguirá desabilitar a macro.

Segue abaixo um exemplo. Na pasta de trabalho que deseja controlar, crie uma planilha (aba) chamada "Auditoria", com o botao direito do mouse, click em 'ocultar' (todos os registros serão gravados nesta aba. Em seguida, aperte alt + F11,  e crie um modulo e cole o codigo abaixo:

* o codigo esta ajustado para controlar o intervalo de celulas "D9:V20" da planilha (aba) desejada

fonte: http://goo.gl/jN6nXm

 

Public Function Log_Sheet(LiveWS As String, AuditWS As String)
    Dim iRow As Integer
    Dim iCol As Integer
    Dim iLastRow As Long

    For iRow = 9 To 20
        For iCol = 4 To 22
            If Sheets(AuditWS).Cells(iRow, iCol).Value <> Sheets(LiveWS).Cells(iRow, iCol).Value Then
                iLastRow = Sheets(AuditWS).Cells(Rows.Count, 1).End(xlUp).Row
                Sheets(AuditWS).Cells(iLastRow + 1, 1) = ActiveWorkbook.Name & " " & LiveWS & " " & AlphaCol(iCol) & CStr(iRow) & " changed"
                Sheets(AuditWS).Cells(iLastRow + 1, 2) = Sheets(AuditWS).Cells(iRow, iCol).Value
                Sheets(AuditWS).Cells(iLastRow + 1, 3) = Sheets(LiveWS).Cells(iRow, iCol).Value
                Sheets(AuditWS).Cells(iRow, iCol) = Sheets(LiveWS).Cells(iRow, iCol).Value
            End If
        Next iCol
    Next iRow

    iLastRow = Sheets(AuditWS).Cells(Rows.Count, 1).End(xlUp).Row
    Sheets(AuditWS).Cells(iLastRow + 1, 1) = "Workbook opened by " & Environ("USERNAME") _
                                             & " on " & Format(Now(), "dd/mm/yyyy") & " at " & Format(Now(), "hh:nn:ss")

End Function

Public Function AlphaCol(argColumn As Integer) As String
    Dim intPrefix As Integer
    Dim strPrefix As String
    intPrefix = 0
    Do Until argColumn <= 26
        intPrefix = intPrefix + 1
        argColumn = argColumn - 26
    Loop
    If intPrefix > 0 Then strPrefix = Chr(intPrefix + 64)
    AlphaCol = strPrefix & Chr(argColumn + 64)
End Function

     

No editor de vba, da planilha (aba) que deseja controlar cole o codigo abaixo: 

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D9:V20")) Is Nothing Then
Call Log_Sheet("plan1", "Auditoria")
End If
End Sub

 

E no editor de 'EstaPasta_de_Trabalho' cole isso:

Private Sub Workbook_Open()
  Call Log_Sheet("plan1", "Auditoria")
  ActiveWorkbook.Save
End Sub

 

 abx.

Link para o comentário
Compartilhar em outros sites

Boas davison, conforme a imagem da tela que voce ( anexou ) postou, no lado esquerdo em "Projeto -VBAPRoject" dá pra ver que voce não criou um modulo conforme eu indiquei no post #2, poriso o motivo do erro, pois este codigo da imagem faz referencia a um codigo que deveria estar neste modulo que nao foi criado..

Dê uma re-lida nas instruções que postei http://forum.clubedohardware.com.br/forums/topic/1112227-controle-de-altera%C3%A7%C3%B5es-log-excel/#entry6110006 e caso tenha aalguma duvida no procedimento me avise.

 

abx. 

Link para o comentário
Compartilhar em outros sites

Boas ...

Altere essas linhas no cod. do módulo1:

             For iRow = 9 To 20

                  For iCol = 4 To 22

Por estas :

             For iRow = 1 To 100

                   For iCol = 1 To 26

 

E no cod. do editor da plan1: 

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:Z100")) Is Nothing Then
Call Log_Sheet("plan1", "Auditoria")
End If
End Sub

 

 

abx.

Link para o comentário
Compartilhar em outros sites

Bom dia Basole

 

deu tudo certo, só que tentei de todas as formas alterar o layout da planilha auditoria queria que ela ficasse da forma abaixo:

 

    Planilha Célula De Para Alterado pelo Usuario em 16/04/2015 às 09:30:45 João Plan1 A1 1000 2000

 

Você consegue alterar ela para sair dessa maneira? pode fica mais fácil filtrar as alterações 
Desde já agradeço sua atenção

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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...