VBA / Worksheet / Change

Anônima
2023-03-24T14:33:29+00:00

Vivam!

Porque com formatação condicional não me parece possível, tentei recorrer ao VBA.

Situação:

S1 - B2:B15 Nomes de polígonos

S2 - C2:C15 Áreas dos referidos polígonos

A - Para a gestão de áreas de polígonos:

Sub ÁreasPolígonos()

Set shtAreas = Sheets("Polígonos") 

For Lin = 2 To 15 

    If shtAreas.Cells(Lin, 3).Value >= 14.5 Then 

       shtAreas.Cells(Lin, 3).Font.ColorIndex = 10 'verde escuro 

    End If 

    If shtAreas.Cells(Lin, 3).Value < 14.5 Then 

       shtAreas.Cells(Lin, 3).Font.Colorlndex = 3 'vermelho 

       shtAreas.Cells(Lin, 3).Font.Bold = True 

    End If 

Next Lin 

End Sub

B - Quando mudam as áreas, assinalar os polígonos que não cumprem a área exigida:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 3 Then

Set shtAreas = Sheets("Polígonos") 

For Lin = 2 To 15 

    If shtAreas.Cells(Lin, 3).Value >= 14.5 Then 

       shtAreas.Cells(Lin, 3).Font.ColorIndex = 10 'verde escuro 

       shtAreas.Cells(Lin, 3).Font.Bold = True 

    End If 

    If shtAreas.Cells(Lin, 3).Value < 14.5 Then 

       shtAreas.Cells(Lin, 3).Font.Colorlndex = 3 'vermelho / erro...

       shtAreas.Cells(Lin, 3).Font.Bold = True 

    End If 

Next Lin 

End If

End Sub

Acontece que devolve erro 438 na linha acima indicada com 'vermelho / erro...

Agradecia a vossa ajuda para tentar perceber e resolver o problema. Ou seja:

Que os nomes dos polígonos que não cumprem a condição fiquem evidenciados a vermelho e a Bold

Grato.

anvs

Microsoft 365 e Office | Excel | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

Resposta aceita pelo autor da pergunta

Dio Xavier 290.1K Pontos de reputação Moderador Voluntário
2023-03-25T14:21:26+00:00

Olá

Para afetar a coluna B com os nomes dos polígonos, você precisa alterar a referência de coluna na linha "If Target.Column = 3 Then" para 2, que é a coluna correspondente aos nomes dos polígonos. Além disso, você precisa atualizar as referências de célula na condição e nas instruções dentro do loop para se referirem à coluna B em vez da coluna C.

Aqui está o código atualizado:

Sub ÁreasPolígonos()

Set shtAreas = Sheets("Polígonos")For Lin = 2 To 15 If shtAreas.Cells(Lin, 3).Value >= 14.5 Then shtAreas.Cells(Lin, 3).Font.ColorIndex = 10 'verde escuro End If If shtAreas.Cells(Lin, 3).Value < 14.5 Then shtAreas.Cells(Lin, 3).Font.ColorIndex = 3 'vermelho shtAreas.Cells(Lin, 3).Font.Bold = True End IfNext Lin

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then 'alterado para coluna B Set shtAreas = Sheets("Polígonos") For Lin = 2 To 15 If shtAreas.Cells(Lin, 2).Value = "" Then 'adicionado para lidar com células em branco shtAreas.Cells(Lin, 2).Font.ColorIndex = xlAutomatic shtAreas.Cells(Lin, 2).Font.Bold = False ElseIf shtAreas.Cells(Lin, 3).Value >= 14.5 Then shtAreas.Cells(Lin, 2).Font.ColorIndex = 10 'verde escuro shtAreas.Cells(Lin, 2).Font.Bold = True ElseIf shtAreas.Cells(Lin, 3).Value < 14.5 Then shtAreas.Cells(Lin, 2).Font.ColorIndex = 3 'vermelho shtAreas.Cells(Lin, 2).Font.Bold = True End If Next LinEnd If

End Sub

Observe que eu também adicionei uma verificação para lidar com células em branco na coluna B. Se uma célula estiver vazia, a formatação será restaurada para a formatação padrão.

Esta resposta foi útil?

1 pessoa achou esta resposta útil.
0 comentários Sem comentários

Resposta aceita pelo autor da pergunta

Dio Xavier 290.1K Pontos de reputação Moderador Voluntário
2023-03-24T19:54:23+00:00

Olá

Bem vindo novamente. o erro 438 ocorre quando uma propriedade ou método é chamado em um objeto que não suporta essa propriedade ou método. Na linha com o erro, "Colorlndex" está digitado incorretamente, deve ser "ColorIndex". Aqui está o código corrigido:

Sub ÁreasPolígonos()

Set shtAreas = Sheets("Polígonos")

For Lin = 2 To 15

    If shtAreas.Cells(Lin, 3).Value >= 14.5 Then

       shtAreas.Cells(Lin, 3).Font.ColorIndex = 10 'verde escuro

    End If

    If shtAreas.Cells(Lin, 3).Value < 14.5 Then

       shtAreas.Cells(Lin, 3).Font.ColorIndex = 3 'vermelho

       shtAreas.Cells(Lin, 3).Font.Bold = True

    End If

Next Lin

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 3 Then

    Set shtAreas = Sheets("Polígonos")

    For Lin = 2 To 15

        If shtAreas.Cells(Lin, 3).Value >= 14.5 Then

           shtAreas.Cells(Lin, 3).Font.ColorIndex = 10 'verde escuro

           shtAreas.Cells(Lin, 3).Font.Bold = True

        End If

        If shtAreas.Cells(Lin, 3).Value < 14.5 Then

           shtAreas.Cells(Lin, 3).Font.ColorIndex = 3 'vermelho

           shtAreas.Cells(Lin, 3).Font.Bold = True

        End If

    Next Lin

End If

End Sub

Espero que ajude na questão.

Esta resposta foi útil?

1 pessoa achou esta resposta útil.
0 comentários Sem comentários

3 respostas adicionais

Classificar por: Mais útil
  1. Dio Xavier 290.1K Pontos de reputação Moderador Voluntário
    2023-03-25T17:35:20+00:00

    Olá

    Disponha!

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2023-03-25T14:35:11+00:00

    Dio Xavier,

    Uma vez mais, agradeço a gentileza da resposta.

    anvs

    Esta resposta foi útil?

    0 comentários Sem comentários
  3. Anônima
    2023-03-24T22:03:33+00:00

    Dio Xavier

    Uma vez mais agradeço o ensinamento.

    Gostaria de saber se seria possível afetar à Col B - Coluna 2 com os nomes dos polígonos - o mesmo efeito de alerta que se verifica na Col C - Coluna 3 com as áreas dos polígonos.

    Agradecido.

    anvs

    Esta resposta foi útil?

    0 comentários Sem comentários