Necesito una Macro para en Outlook ajustar los párrafos



   AUTOR PREGUNTA

Publicado 24 mayo 2023 - 15:05

Estoy haciendo una macro en Visual Basic y no consigo quitar el error del objeto




1 personas más tuvieron esta duda Yo también

 

Publicado 28 junio 2023 - 03:10

Si necesitas una Macro para en Outlook ajustar los párrafos, tengo yo una creada basica que te puedo dejar a ver si te sirve para lo que estás buscando:

 

Lo primero decirte que para automatizar el ajuste de párrafos en Outlook usando VBA (Visual Basic for Applications), puedes usar una macro como esta que te adjunto. Esta macro ajustará el párrafo del correo electrónico seleccionado:

 

Abres el editor VBA:

  1. Abre Outlook.
  2. Presiona "Alt + F11" para abrir el Editor de VBA.
  3. En el menú superior, selecciona "Insertar" > "Módulo". Esto creará un nuevo módulo en el panel izquierdo.

Pega el siguiente código en el nuevo módulo:

Sub AjustarParrafos()

    ' Obtén el correo electrónico seleccionado
    Dim mail As Outlook.MailItem
    Set mail = Application.ActiveExplorer.Selection.Item(1)

    ' Obtén el cuerpo del correo electrónico en formato HTML
    Dim body As String
    body = mail.HTMLBody

    ' Crea un objeto para manipular el HTML
    Dim doc As Object
    Set doc = CreateObject("htmlfile")
    doc.body.innerHTML = body

    ' Ajusta todos los párrafos en el correo electrónico
    Dim p As Object
    For Each p In doc.getElementsByTagName("p")
        p.style.textAlign = "justify"
    Next p

    ' Actualiza el cuerpo del correo electrónico
    mail.HTMLBody = doc.body.innerHTML

    ' Guarda los cambios
    mail.Save

End Sub

Este código toma el correo electrónico, obtiene su contenido, ajusta todos los párrafos y luego actualiza el correo electrónico con los párrafos ajustados. Ten en cuenta que este código sólo funcionará con correos electrónicos en formato HTML. Es para tenerlo en cuenta, pero a mi me sirvió mucho, espero que a ti también.

 

Para ejecutar la macro supongo que lo sabrás pero te lo digo en pasos:

  1. Guarda y cierra el Editor VBA.
  2. En Outlook, selecciona el correo electrónico que deseas ajustar.
  3. Presiona "Alt + F8" para abrir la ventana de macros. O abrela por el menu que ya sabrás.
  4. Selecciona la macro "AjustarParrafos" y haz clic en "Ejecutar".

 

Ten en cuenta que, debido a las restricciones de seguridad de Outlook, es posible que tengas que ajustar la configuración de seguridad de tu macro. Puedes tener que hacerlo si te lo pide en: "Archivo" > "Opciones" > "Centro de confianza" > "Configuración del Centro de confianza" > "Configuración de macros", y luego selecciona "Notificaciones para todas las macros".

 

Ya me dices si esto te ha servido para lo que estabas buscando, saludos.


   AUTOR PREGUNTA

Publicado 28 agosto 2023 - 13:02

Gracias Celio, lo copié, pero al ejecutarlo me da el error "variable de objeto o bloque With no establecido"


   AUTOR PREGUNTA

Publicado 28 agosto 2023 - 13:53

Celio, lo conseguí ejecutar, pero lo que yo necesito es poder ajustar el texto al responder un correo porque no me coge el formato como el de un correo nuevo. Gracias


 

Publicado 29 agosto 2023 - 11:40

Celio, lo conseguí ejecutar, pero lo que yo necesito es poder ajustar el texto al responder un correo porque no me coge el formato como el de un correo nuevo. Gracias

 

Hola, puedes por fa compartir como lo has conseguido hacer (si lo consigues en algun momento) que a mi también me interesa, saludos y gracias!


 

Publicado 29 agosto 2023 - 16:32

Celio, lo conseguí ejecutar, pero lo que yo necesito es poder ajustar el texto al responder un correo porque no me coge el formato como el de un correo nuevo. Gracias

 

Entiendo que deseas ajustar el texto al responder un correo utilizando la macro proporcionada, pero que el formato no se muestra como cuando se crea un correo nuevo.

 

El problema es en cómo Outlook maneja los correos al responder. Cuando respondes a un correo en Outlook, la aplicación agrega el texto del correo original de una manera diferente que cuando creas un correo nuevo. Esto puede afectar con la forma en que la macro ajusta los párrafos.

 

Para solucionarlo, puede servirte esto:

 

1) Asegúrate de que estás trabajando con el objeto correcto. Si estás respondiendo a un correo, necesitas trabajar con el objeto de respuesta, no con el correo original.

 

2) Si el problema es específico para los correos respondidos, podrías agregar una condición para identificar si el correo es una respuesta y, en base a ello, ajustar el contenido de manera adecuada.

 

3) Formato HTML no lo olvides. La macro proporcionada trabaja con correos en formato HTML. Si el correo original no estaba en este formato, es posible que la macro no funcione correctamente.

 

4) Contenido Anidado es otra opcion. Al responder, Outlook anida el correo original dentro de bloques de div, lo que podría interferir con la manipulación del HTML. En este caso, necesitarías profundizar en el árbol DOM del HTML para ajustar los párrafos del correo original.

 

Para adaptar la macro a tus necesidades concretas que puedes necesitar es verdad que se necesita un poco más de conocimiento en programación VBA y manejo de HTML. No se si te quedas en algun punto concreto, puedo ayudarte sin problemas.


 

Publicado 29 agosto 2023 - 18:38

Celio, lo conseguí ejecutar, pero lo que yo necesito es poder ajustar el texto al responder un correo porque no me coge el formato como el de un correo nuevo. Gracias

 

Entendido. Lo que necesitas es que, al responder un correo en Outlook, el texto se ajuste automáticamente al formato que desees, en este caso justificado. A continuación, te propongo una solución utilizando VBA:

 

1. Primero, abre el Editor VBA de Outlook (puedes presionar `ALT` + `F11`).

 

2. En el Explorador de Proyectos, ubica `ThisOutlookSession` y haz doble clic sobre él.

 

3. Copia y pega el siguiente código:

Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
  Dim ns As Outlook.NameSpace
  Set ns = Application.GetNamespace("MAPI")
  ' Observa la carpeta de elementos enviados
  Set Items = ns.GetDefaultFolder(olFolderSentMail).Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  On Error Resume Next
  ' Verifica si es un correo
  If TypeOf Item Is Outlook.MailItem Then
      AdjustReplyMailFormat Item
  End If
End Sub

Sub AdjustReplyMailFormat(ByRef Mail As Outlook.MailItem)
  If Mail.Subject Like "RE:*" Or Mail.Subject Like "FW:*" Then
      Dim body As String
      body = Mail.HTMLBody
      ' Crea un objeto para manipular el HTML
      Dim doc As Object
      Set doc = CreateObject("htmlfile")
      doc.body.innerHTML = body

      ' Ajusta todos los párrafos en el correo electrónico
      Dim p As Object
      For Each p In doc.getElementsByTagName("p")
          p.style.textAlign = "justify"
      Next p

      ' Actualiza el cuerpo del correo electrónico
      Mail.HTMLBody = doc.body.innerHTML
      ' Guarda los cambios
      Mail.Save
  End If
End Sub

4. Guarda y cierra el Editor VBA.

 

5. Reinicia Outlook para que la macro comience a funcionar.

 

El código anterior supervisa la carpeta de elementos enviados. Cada vez que envíes un correo, verificará si es una respuesta (o un reenvío) y, en ese caso, ajustará el formato del texto a justificado. Espero que este caso te sirva mas que el primero. Yo es que uso a veces casos de este tipo de macros para otras cosas similares.

 

saludos.

 

Celio.


 

Publicado 29 agosto 2023 - 18:52

Y también te dejo este que si deseas ajustar el formato de un CORREO NUEVO antes de enviarlo, el enfoque será diferente. En lugar de monitorear la carpeta de elementos enviados, debes capturar el evento `ItemSend` de Outlook.

 

Te digo de nuevo los pasos si es asi como quieres:

 

1. Primero, abre el Editor VBA de Outlook (puedes presionar `ALT` + `F11`).

 

2. En el Explorador de Proyectos, ubica `ThisOutlookSession` y haz doble clic sobre él.

 

3. Copia y pega el siguiente código:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
  If TypeOf Item Is Outlook.MailItem Then
      AdjustNewMailFormat Item
  End If
End Sub
Sub AdjustNewMailFormat(ByRef Mail As Outlook.MailItem)
  Dim body As String
  body = Mail.HTMLBody
  ' Crea un objeto para manipular el HTML
  Dim doc As Object
  Set doc = CreateObject("htmlfile")
  doc.body.innerHTML = body

  ' Ajusta todos los párrafos en el correo electrónico
  Dim p As Object
  For Each p In doc.getElementsByTagName("p")
      p.style.textAlign = "justify"
  Next p

  ' Actualiza el cuerpo del correo electrónico
  Mail.HTMLBody = doc.body.innerHTML
End Sub

4. Guardalo y cierra el Editor VBA.

 

5. Reinicia Outlook para que la macro comience a funcionar.

 

Ahora, cada vez que envíes un correo nuevo, la macro ajustará automáticamente el formato del texto a justificado antes de que se envíe que creo es lo que estás buscando.


   AUTOR PREGUNTA

Publicado 31 agosto 2023 - 13:25

Hola Celio, gracias por responder.

Para el envío de correos nuevos, no hay ningún problema, porque utilizo la plantilla.

Es para las respuestas o reenvios. Lo que quiero es justificar el texto,aumentar la sangría un punto y agregar espacio antes del párrafo.

He copiado el código que me has enviado, lo he guardado y cerrado, como indicas, pero luego no lo muestra para poderlo ejecutar.