Diferentes macros en una hoja

Como se inserta de nuevo una macro muy parecida a esta que copio debajo, ¿teniendo en cuenta que lo único que cambiará es el mensaje que tiene que encontrar? En este caso es "Enviar", pero en la misma "hoja" quiero añadir debajo de esta, otra macro pero que ponga en vez "Enviar2", por ejemplo.

He realizado la prueba copiando lo mismo, me hace una ralla de lado a lado separando las macros, cambiado la palabra por "Enviar2" pero me da error al inicio de esta nueva macro.

Gracias,

Private Sub Worksheet_Calculate()
'Por Dante Amor
Set h1 = Sheets("AVISO ORDENES") 'hoja con datos
Set h2 = Sheets("Enviados") 'hoja de control de filas enviadas
'
For i = 21 To h1.Range("P" & Rows.Count).End(xlUp).Row
If LCase(h1.Cells(i, "P").Value) = LCase("Enviar") Then
Set b = h2.Columns("A").Find(i, lookat:=xlWhole)
If b Is Nothing Then
'la fila no se ha enviado, se envía el correo
fila = i
Set Dam = CreateObject("outlook.application").createitem(0)
Dam.To = "[email protected]" 'Destinatarios
Dam.Subject = "Aviso IBEX "
Dam.Body = Cells(24, "AB") 'Cuerpo
'dam. Send 'El correo se envía en automático
Dam. Display 'El correo se muestra
Dam. Send
'
'Se agrega la fila para que el correo no sea enviado
'
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
h2.Range("A" & u2).Value = fila
h2.Range("B" & u2).Value = "Enviado"
End If
End If
Next
End Sub

1 respuesta

Respuesta
1

Se debe realizar en una sola macro, ya que solamente existe un evento "Calculate"

Te anexo el código actualizado, solamente pon tus datos para cuando es "Enviar2"

Private Sub Worksheet_Calculate()
'Por Dante Amor
    Set h1 = Sheets("AVISO ORDENES") 'hoja con datos
    Set h2 = Sheets("Enviados") 'hoja de control de filas enviadas
    '
    For i = 21 To h1.Range("P" & Rows.Count).End(xlUp).Row
        para = ""
        Select Case LCase(h1.Cells(i, "P").Value)
            Case LCase("Enviar")
                para = "[email protected]" 'Destinatarios
                asunto = "Aviso IBEX "
                cuerpo = Cells(24, "AB").Value 'Cuerpo
            Case LCase("Enviar2")
                para = "[email protected]" 'Destinatarios
                asunto = "Aviso 2 "
                cuerpo = Cells(24, "AB").Value 'Cuerpo
        End Select
        If para <> "" Then
            Set b = h2.Columns("A").Find(i, lookat:=xlWhole)
            If b Is Nothing Then
                'la fila no se ha enviado, se envía el correo
                fila = i
                Set Dam = CreateObject("outlook.application").createitem(0)
                Dam.To = para
                Dam.Subject = asunto
                Dam.Body = cuerpo
                'dam. Send 'El correo se envía en automático
                Dam. Display 'El correo se muestra
                Dam. Send
                '
                'Se agrega la fila para que el correo no sea enviado
                '
                u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
                h2.Range("A" & u2).Value = fila
                h2.Range("B" & u2).Value = "Enviado"
            End If
        End If
    Next
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Perfecto, funciona!

Ahora los valores de los que se "retroalimenta" una celda, para después por fórmulas indicar si debe o no mandar el mensaje, lo pongo manualmente. 

Esta macro funcionará también cuando sea automáticamente que se vaya modificando? Lo hace mediante una conexión a una página externa (cotizaciones de índice bursátil).

Saludos, 

No entendí.

¿Es una petición nueva?

Cada que se actualicen los valores automáticamente con la conexión, la macro se activará.

[No olvides valorar la respuesta. Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas