Notifications
Clear all

Controle de acesso

8 Posts
3 Usuários
0 Reactions
1,198 Visualizações
(@heleones)
Posts: 10
Active Member
Topic starter
 

Bom dia, pessoal!

Em outro tópico foi colocada a solução abaixo para controle de acesso.
Ocorre que a macro faz o histórico de alterações de todas as planilhas do workbook.
Há como fazer que a macro faça a verificação das alterações de uma planilha especifica ou de um range específico de células dentro desta planilha?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim wsHist As Worksheet, Rng As Range
Set wsHist = Sheets("História")
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

Desde já, agradeço.

Heleones.

 
Postado : 29/12/2017 12:30 pm
(@klarc28)
Posts: 971
Prominent Member
 

Private Sub Workbook_SheetChange( ByVal Target As Range)
Dim wsHist As Worksheet, Rng As Range
Set wsHist = Sheets("História")

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

 
Postado : 29/12/2017 12:52 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Heleones,

Boa tarde!

Seja muito bem vindo ao fórum.

Para aproveitar ao máximo o fórum e sempre manter o mesmo de forma organizada, sugiro ler os tópico da regras abaixo:
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

Solicitamos, por gentileza, utilizar a ferramenta CODE existente no início da caixa de mensagens quando inserir código VBA aqui no fórum.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 29/12/2017 1:25 pm
(@heleones)
Posts: 10
Active Member
Topic starter
 

Caros,
Obrigado pelo acolhimento e pelas dicas/regras de utilização do fórum.
Obrigado também pela resposta.
Sou um iniciante.

Quanto à resposta, fiz a alteração proposta, porém houve erro de compilação: a declaração de procedimento não corresponde à descrição de evento...
Então, para atender minha demanda de fazer com que a macro apenas monitore as alterações de uma planilha específica dentro do workbook, fiz os ajustes para adequá-la para worksheet.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsHist As Worksheet, Rng As Range
Set wsHist = Sheets("História")

Set Rng = wsHist.Range("A" & Rows.Count).End(xlUp).Offset(1)
With Rng
.Value = Now
.Offset(, 1) = Target.Address
If Target.Cells.Count > 1 Then
.Offset(, 2) = "Valores Alterados"
Else
.Offset(, 2) = Target.Formula
End If
End With
End Sub

E funcionou muito bem.
Porém a macro precisa ser mais restritiva. Preciso fazer com que a macro não monitore todas as alterações na worksheet, mas de um determinado range de células dentro da worksheet, como por exemplo, no intervalo C10:C20.

Mais uma vez, thanks.

 
Postado : 30/12/2017 7:37 am
(@klarc28)
Posts: 971
Prominent Member
 

Esqueça esse código e explique detalhadamente o que deseja fazer nesse intervalo C10:C20. Anexe a planilha para facilitar o entendimento.

 
Postado : 30/12/2017 7:50 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

A macro original monitora as alterações de todas as planilhas da pasta de trabalho e gera uma lista de alterações na plan "História". Esta macro funciona, mas para minhas necessidades, eu não preciso que a macro monitore todas as planilhas dentro da parta, mas que ela monitore as alterações apenas em uma das planilhas (Plan1, por exemplo). Seguindo as sugestões aqui, eu fiz as alterações de salvei a macro dentro da planilha que eu quero monitorar (Plan1, por exemplo). Neste aspecto ela funcionou bem, porém, ela monitora todas as alterações dentro de Plan1.

Eu queria, de fato, que a macro fosse mais restritiva ainda: que ela monitore as alterações somente no intervalo C10:C20 da Plan1 ou em intervalos não contínuos, como por exemplo C10:C20 e D5:D10 da Plan1.

Grato

 
Postado : 30/12/2017 8:39 am
(@klarc28)
Posts: 971
Prominent Member
 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsHist As Worksheet, Rng As Range
Set wsHist = Sheets("História")

Set Rng = wsHist.Range("A" & Rows.Count).End(xlUp).Offset(1)
if target.row >= 10 and target.row <=20 and target.column = 3 or target.column = 4 and target.row >= 5 and target.row <= 10 then
With Rng
.Value = Now
.Offset(, 1) = Target.Address
If Target.Cells.Count > 1 Then
.Offset(, 2) = "Valores Alterados"
Else
.Offset(, 2) = Target.Formula
End If
End With
end if
End Sub
 
Postado : 30/12/2017 8:45 am
(@heleones)
Posts: 10
Active Member
Topic starter
 

Desculpa a demora. Estava envolvido com outros assuntos de trabalho.
Eu ia mandar agora a planilha, mas testei as alterações propostas e funcionou perfeitamente para o que eu queria.
Então, muito obrigado pelo apoio e pela paciência.
Aproveitando o ensejo... um ano novo de sucesso e repleto de realizações.
Heleones

 
Postado : 30/12/2017 9:25 am