Estoy haciendo una macro en Visual Basic y no consigo quitar el error del objeto
Necesito una Macro para en Outlook ajustar los párrafos
#1 AUTOR PREGUNTA
Preguntas Similares
Esto también te interesa!
#2
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:
- Abre Outlook.
- Presiona "Alt + F11" para abrir el Editor de VBA.
- 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:
- Guarda y cierra el Editor VBA.
- En Outlook, selecciona el correo electrónico que deseas ajustar.
- Presiona "Alt + F8" para abrir la ventana de macros. O abrela por el menu que ya sabrás.
- 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.
#3 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"
#4 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
#5
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!
#6
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.
#7
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.
#8
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.
#9 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.