Notifications
Clear all

Mudar para o Change da planilha

5 Posts
2 Usuários
0 Reactions
734 Visualizações
(@dimorais)
Posts: 431
Honorable Member
Topic starter
 

Boa noite
Preciso alterar esse código para o change da planilha, mas nun deu. :D

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim wks As Worksheet
Dim rngX As Range
Dim rngNumber As Range
Dim lngNumbersCol As Long
If Not TypeName(Sh) = "Worksheet" Then Exit Sub
If Intersect(Range(gcstrX), Target) Is Nothing Then Exit Sub
If LCase(Target.Value) <> "x" Then Exit Sub
lngNumbersCol = Sh.Range(gcstrNumbers).Column
Application.EnableEvents = False
For Each wks In ThisWorkbook.Worksheets
For Each rngX In wks.Range(gcstrX)
If wks.Cells(rngX.Row, lngNumbersCol) = Cells(Target.Row, lngNumbersCol) Then
wks.Cells(rngX.Row, lngNumbersCol).Interior.color = vbYellow
If wks.Cells(rngX.Row, lngNumbersCol) = Cells(Target.Row, lngNumbersCol) Then
wks.Cells(rngX.Row, lngNumbersCol).Font.color = vbYellow
End If
End If
Next rngX
Next wks
Application.EnableEvents = True
End Sub

 
Postado : 30/07/2014 4:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi... o que exatamente vc quer fazer ?
e o que é isso: gcstrX ? Alguma constante (ou variável) global ?

Vc quer que esse código rode em todas as planilhas, toda vez que alguma alteração é feita em uma planila específica ?

Vc quer que o mesmo evento change rode pra todas as planilha, mas somente uma vez?

Desculpa, é q nao ficou mto claro...

 
Postado : 30/07/2014 4:20 pm
(@dimorais)
Posts: 431
Honorable Member
Topic starter
 

Opa. Desculpas aceitas :D

"gcstrX ? Alguma constante (ou variável) global ?"
R:. Constante Global

"Vc quer que esse código rode em todas as planilhas, toda vez que alguma alteração é feita em uma planilha específica ?"
R:. Apenas em uma planilha específica. Plan1 por exemplo. Hoje roda no livro todo, sempre que é feita algum tipo de alteração.

"Vc quer que o mesmo evento change rode pra todas as planilha, mas somente uma vez?"
R:. Rode apenas na planilha específica sempre que alguma alteração for feita.

 
Postado : 30/07/2014 6:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Use isso na folha de çodigo da própria planilha, e não da "EstaPastadeTrabalho"...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wks             As Excel.Worksheet
Dim rngX            As Excel.Range
Dim rngNumber       As Excel.Range
Dim lngNumbersCol   As Long

    Set wks = Target.Parent
    
    If Not VBA.TypeName(wks) = "Worksheet" Then Exit Sub
    If Application.Intersect(wks.Range(gcstrX), Target) Is Nothing Then Exit Sub
    If VBA.LCase(Target.Value) <> "x" Then Exit Sub
    
    lngNumbersCol = wks.Range(gcstrNumbers).Column
    Application.EnableEvents = False
    
    With wks
        For Each rngX In wks.Range(gcstrX)
        
            If .Cells(rngX.Row, lngNumbersCol) = .Cells(Target.Row, lngNumbersCol) Then
            
                .Cells(rngX.Row, lngNumbersCol).Interior.Color = vbYellow
                If .Cells(rngX.Row, lngNumbersCol) = .Cells(Target.Row, lngNumbersCol) Then
                    .Cells(rngX.Row, lngNumbersCol).Font.Color = vbYellow
                End If
                
            End If
            
        Next rngX
    End With
    
    Set wks = Nothing
    
    Application.EnableEvents = True
End Sub
 
Postado : 30/07/2014 6:26 pm
(@dimorais)
Posts: 431
Honorable Member
Topic starter
 

HOMi, ficou uma belezura :lol:. Meus agradecimentos :D

 
Postado : 30/07/2014 6:46 pm