Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por JorgeLuisNeves
Posts
#37554
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
Por osvaldomp
#37567
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
Por VictorMota
#38176
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!!
Por osvaldomp
#38178
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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord