Ir ao conteúdo

Posts recomendados

Postado

Bom dia pessoal!

 

Conheço quase nada em VBA e queria que esse código abaixo buscasse toda a coluna A ou um intervalo A1:A100 ao invés de somente a célula A1.

 

Private Sub Worksheet_Calculate()
 If Range("A1").Value <> PrevVal Then
 MsgBox "Algo mudou!"
 PrevVal = Range("A1").Value
 End If
End Sub

 

Quando eu uso  ("A"), ("A1:A100") ou ("$A$") ele manda pro depurador.

 

Retirei desse site: https://www.funcaoexcel.com.br/macro-que-roda-automaticamente/

Postado

Isso porque você não pode comparar uma Range com um valor. São dimensões diferentes; 

O que você pode fazer é comparar o Valor (PervVel) com o valor de cada célula da sua Range. 


 

Private Sub Worksheet_Calculate()

For i = 1 to 100

     If Range("A" & i).Value <> PrevVal Then
        MsgBox "Algo mudou!"
        PrevVal = Range("A"& i).Value

        Goto Fim
     End If

Next i

Fim:
End Sub

 

  • Curtir 2
Postado

Nesse caso aqui, como eu faço para ao invés dele buscar a linha ele buscar toda a coluna?

 

With OutMail
            .To = "" & Planilha10.Cells(linha, 15) & ""

Postado

Deixe me ver. Você tem vários emails numa coluna correto?

 

Dessa forma você não conseguirá. Lembre-se que você está tentando fazer com que o VBA entenda uma range como se fosse um valor. 

 

Tem de inseri-lo em um laço de repetição. como fiz no exemplo acima.

 

 

https://diarioexcel.com.br/2018/07/03/estruturas-de-repeticao/

 

 

ou poste seu código, de repente posso te ajudar

 

 

 

Postado

Isso! tenho vários e-mail em uma coluna

 

Private Sub Worksheet_Change(ByVal Target As Range)

'Envia e-mail pelo Outlook

    Dim OutApp As Object
    Dim OutMail As Object
    Dim texto As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    linha = ActiveCell.Row - 1
        'If Target.Address = "$M$" & linha Then

        If Range("M2").Value <> PrevVal Then

        If Planilha10.Cells(linha, 13) = "Sim" Then
         texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                    "O item: " & Planilha10.Cells(linha, 3) & " necessita de reparo" & "." & vbCrLf & vbCrLf & _


           End If

           If Planilha10.Cells(linha, 13) = "Não" Then
            texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                    "Foi reparado o item: " & Planilha10.Cells(linha, 3) & vbCrLf & vbCrLf & _


           End If

 

PrevVal = Range("M2").Value


        With OutMail
            .To = "" & Planilha10.Cells(linha, 15) & ""
            .CC = ""
            .BCC = ""
            .Subject = "Título do e-mail"
            .Body = texto
            .Display   'Utilize Send para enviar o email sem abrir o Outlook
        End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing

            End If

Postado
Private Sub Worksheet_Change(ByVal Target As Range)

'Envia e-mail pelo Outlook

    Dim OutApp As Object
    Dim OutMail As Object
    Dim texto As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    For i = 15 To 100 'supondo que os endereços de e-mail estão entre a linha 15 até a 100. Ajuste isso.
    
    linha = ActiveCell.Row - 1
        'If Target.Address = "$M$" & linha Then

        If Range("M2").Value <> PrevVal Then

        If Planilha10.Cells(linha, 13) = "Sim" Then
         texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                    "O item: " & Planilha10.Cells(linha, 3) & " necessita de reparo" & "." & vbCrLf & vbCrLf

           End If

           If Planilha10.Cells(linha, 13) = "Não" Then
            texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                    "Foi reparado o item: " & Planilha10.Cells(linha, 3) & vbCrLf & vbCrLf

           End If

PrevVal = Range("M2").Value


        With OutMail
            .to = "" & Planilha10.Cells(i, 15) & ""
            .CC = ""
            .BCC = ""
            .Subject = "Título do e-mail"
            .Body = texto
            .Display   'Utilize Send para enviar o email sem abrir o Outlook
        End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing
        
        End If

 		Next i
End sub

 

Postado
1 hora atrás, André_Arruda disse:

Private Sub Worksheet_Change(ByVal Target As Range)

'Envia e-mail pelo Outlook

    Dim OutApp As Object
    Dim OutMail As Object
    Dim texto As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    For i = 15 To 100 'supondo que os endereços de e-mail estão entre a linha 15 até a 100. Ajuste isso.
    
    linha = ActiveCell.Row - 1
        'If Target.Address = "$M$" & linha Then

        If Range("M2").Value <> PrevVal Then

        If Planilha10.Cells(linha, 13) = "Sim" Then
         texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                    "O item: " & Planilha10.Cells(linha, 3) & " necessita de reparo" & "." & vbCrLf & vbCrLf

           End If

           If Planilha10.Cells(linha, 13) = "Não" Then
            texto = "Prezado(a), " & vbCrLf & vbCrLf & _
                    "Foi reparado o item: " & Planilha10.Cells(linha, 3) & vbCrLf & vbCrLf

           End If

PrevVal = Range("M2").Value


        With OutMail
            .to = "" & Planilha10.Cells(i, 15) & ""
            .CC = ""
            .BCC = ""
            .Subject = "Título do e-mail"
            .Body = texto
            .Display   'Utilize Send para enviar o email sem abrir o Outlook
        End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing
        
        Next i

            End If
End sub

 

 

Tá dando Next sem for

Acho que ele não está identificando a coluna O como sendo a coluna da lista de emails.

 

"" & Planilha10.Cells(linha, 15) & ""  'Esse 15 não é a linha não, é a coluna O

 

Minha lista de emails está na coluna O. Na minha fórmula eu estava identificando como 15.

 

Postado
5 horas atrás, André_Arruda disse:

 

 

adicionado 1 minuto depois

Tinha uma erro. Editei ele ai em cima. Copia ele novamente e tenta de novo.

 

Editei a o da minha postagem, não o da sua.

 

Deu certo não!

 

Pode deixar que isso aí eu resolvo fazendo: 

 

.To = "e-mail" 'Digite o e-mail que deseja, ou vários e-mail. Separando-os com ;

 

Me ajuda no seguinte se possível:

 

Minha fórmula real é:

If Target.Address = "$M$" & linha Then

Porém ele só envia o e-mail quando alguma célula da coluna M é alterada manualmente. Por esse motivo eu troquei essa fórmula aí por:

If Range("M2").Value <> PrevVal Then

Acontece que depois disso qualquer célula de qualquer coluna que sofre alteração Manualmente ou via Fórmula acaba sendo enviado por e-mail. Eu preciso que envie por e-mail somente quando alguma célula da coluna M mudar via fórmula.

 

Obrigado amigo!

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!