Notifications
Clear all

log de alteração

2 Posts
2 Usuários
0 Reactions
935 Visualizações
(@reinaldo_silva)
Posts: 38
Trusted Member
Topic starter
 

bom dia a todos,

caros eu uso o código abaixo para controle de alterações na planilha, porém quando chega num determinado número de células começa a dar erro na aplicação...dae eu limpo a planilha que registra as ocorrências e volta a funcionar...

Pergunta: Será que tem alguma coisa errada no código...se alguém puder me ajudar

Att

Option Explicit
'rotina para gravacao de log de alteracoes tem a funcao de capturar os nomes da maquina e usuario
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, _
nSize As Long) As Long

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, _
nSize As Long) As Long
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'rotina para gravacao de log de alteracoes
Dim wsLog As Worksheet, Rng As Range
Dim B, Comp_Name, UserName, Arquivo1 As String
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)

Set wsLog = Sheets("Log") 'pasta onde sera gravado o log de alteracoes
If Sh Is wsLog Then Exit Sub
Set Rng = wsLog.Range("A" & Rows.Count).End(xlUp).Offset(1)
With Rng
.Value = Now 'data
.Offset(, 1) = Sh.Name 'nome da pasta onde o dado foi alterado
.Offset(, 2) = Target.Address 'endereco da celula alterada
.Offset(, 3) = UserName 'nome do usuario logado no PC
.Offset(, 4) = Comp_Name 'maquina utilizada pelo usuario
If Target.Cells.Count > 1 Then
.Offset(, 5) = "Valores Alterados" 'alteracoes realizadas
Else
.Offset(, 5) = Target.Formula
End If
End With
End Sub

 
Postado : 30/01/2013 6:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

porém quando chega num determinado número de células começa a dar erro na aplicação

Voce não mencionou qual seu excel ou qual o numero de linha que dá erro então :
A planilha excel tem um numero limitado de linhas (2003 um pouco mais de 65000; e 2007/2010 pouco mais de um milhão)
Se o registro chegar nesse limite, deverá gerar erro, então deve mudar de coluna e reiniciar.
Talvez com algo assim:

'excel 2007/2010, para 2003 utilizar 65536
If ActiveCell.Row = 1048576 Then
ActiveCell.Offset(-1048575, 1).Select
Else
ActiveCell.Offset(1, 0).Select
End If
 
Postado : 30/01/2013 7:15 am