Mauro Coutinho Bom Dia.
Muito obrigado por ajudar neste caso.
Estou utilizando a rotina que você criou aqui no trabalho, porém surgiu uma dúvida.
Desculpe incomodar mesmo depois de colocar o tópico como resolvido, mas minha dúvida e o seguinte.
Este código não identifica informações de combo box?
Quando é alterado valores em campos onde tem combo box aparece que informação interior e vazia e foi alterado para valor x sendo que na célula tinha informação.
Se possível poderia explicar o que causa isso?
Desde já agradeço e peço desculpas pelo incomodo.
Abraços
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Save
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim I As Integer
Dim wsLog As Worksheet
Set wsLog = Sheets("Log") 'pasta onde sera gravado o log de alteracoes
'Se a alteracao for feita na Aba Log, sai da rotina
If Sh Is wsLog Then Exit Sub
For I = 1 To Target.Count
Log I, Target(I).Value, Target(I).Address(False, False), ActiveSheet.Name
Next I
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim I As Integer
'Armazena o Valor anterior
ReDim GlbValorAntigo(Target.Count)
For I = 1 To Target.Count
GlbValorAntigo(I) = Target(I)
Next I
End Sub
Global GlbValorAntigo() As String
'rotina para capturar os nomes da maquina e usuario
Public Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long
Public Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long
Public sQualPlanilha
Public sQualEnde
Public sGlbValorAntigo
Public sNewValue
Sub Log(Pos As Integer, NewValue, QualEnde, QualPlanilha As String)
On Error Resume Next
If GlbValorAntigo(Pos) = Empty Then
GlbValorAntigo(Pos) = "VAZIO"
End If
If NewValue = Empty Then
NewValue = "VAZIO"
End If
If NewValue = GlbValorAntigo(Pos) Then
Exit Sub
End If
'Armazena nas Variaveis as alteracoes
sQualPlanilha = QualPlanilha
sQualEnde = QualEnde
sGlbValorAntigo = GlbValorAntigo(Pos)
sNewValue = NewValue
Call lancarLog
GlbValorAntigo(Pos) = Empty
End Sub
Sub lancarLog()
Dim Comp_Name_B As String * 255
Dim lpBuff As String * 25
GetComputerName Comp_Name_B, 255
Comp_Name = Left(Comp_Name_B, InStr(Comp_Name_B, Chr(0)) - 1)
GetUserName lpBuff, 25
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Dim swLog As Worksheet
Set swLog = Worksheets("Log")
Set Rng = swLog.Range("A" & Rows.Count).End(xlUp).Offset(1)
With Rng
.Value = Now 'data / Hora
.Offset(, 1) = sQualPlanilha 'nome da Aba onde o dado foi alterado
.Offset(, 2) = sQualEnde 'endereco da celula alterada
.Offset(, 3) = UserName 'nome do usuario logado no PC
.Offset(, 4) = Comp_Name 'maquina utilizada pelo usuario
.Offset(, 5) = sGlbValorAntigo 'Valor Anterior
.Offset(, 6) = sNewValue 'Valor Atual
End With
End Sub
Postado : 24/09/2013 7:34 am