Me han pedido que haga una macro de forma que al pulsar un botón en una hoja excel me permita escoger un criterio de filtrado, filtre esos valores y use ciertas columans de ese filtro apra combinar directamente en un documento Word (una carta) previamente diseñada. Es urgente.
Como que no entendí, si es pregunta, es comentario, "u que", como diría un amigo... Si es tarea con gusto te ayudo a desarrollarla pero debes de poner de tu parte, ¿qué es lo que tienes respecto a código?
Lo que he logrado ha sido que al pulsar un botón en excel, se haga un filtro como yo quiero y esos datos se copien a otra hoja. Mi pregunta es:¿Cómo puedo hacer que dichos datos se combinen en una carta de Microsoft Word directamente? Es decir, que lo haga todo seguido al pulsar el botón. Espero que me hayas comprendido ahora
No, disculpa, soy un poco "lento", si entiendo lo que quieres, pero si no das "detalles", ni pones código, a mi vez puedo suponer que no tendrás problema con el código que te envíe, así que supondré esto y te anexo una código que esta asignado al evento click de un botón, lo que hace, es tomar datos de una base de datos (verifica el nombre, la ruta y la consulta SQL) y combinarlos en un correo electrónico, para lograr lo que quieres, este código te sirve, con unos pequeños cambios que es tu tarea hacerlos... Private Sub cmdEnviarCorreo_Click() Dim objWord As Object 'Instancia de Word Dim strMensaje As String 'Cuerpo del mensaje Dim strConexion As String 'Conexion a la base de datos Dim strSql As String 'Consulta de SQL Dim strTitulo As String 'Titulo del mensaje Dim strPLinea As String 'Primer linea del mensaje Dim strSql2 As String 'Consulta personalizada Dim bolPersonal As Boolean 'Si hay consulta personalizada Dim Res As Integer 'Respuestas al MsgBox 'Contantes definidas para las propiedades y metodos de Word Const wdFormLetters As Integer = 0 'Tipo de documento combinado Const wdOpenFormatAuto As Integer = 0 'Apertura de formato automatico Const wdSendToEmail As Integer = 2 'Combinar en correo electronico Const wdDefaultFirstRecord As Integer = 1 'Primer registro por default Const wdDefaultLastRecord As Integer = -16 'Ultimo registro por default Const wdStory As Integer = 6 'Avance por documento Const wdLine As Integer = 5 'Avance por linea On Error GoTo err_Control 'Ruta de la base de datos strBase = App.Path & "\Datos.mdb" 'Consulta SQL strSql = "SELECT * FROM [tblDatos]" strMensaje = Trim(txtCuerpo.Text) 'Creamos el documento de Word Set objWord = CreateObject("Word.Document") With objWord.Parent .Selection.TypeText strMensaje 'Introduzco el mensaje With .ActiveDocument.MailMerge 'Combino correspondencia .MainDocumentType = wdFormLetters 'Establezco todas las propiedades .OpenDataSource Name:=strBase, _ Format:=wdOpenFormatAuto, _ ConfirmConversions:=False, _ ReadOnly:=False, _ LinkToSource:=False, _ AddToRecentFiles:=False, _ PasswordDocument:="", _ PasswordTemplate:="", _ Revert:=False, _ WritePasswordDocument:="", _ WritePasswordTemplate:="", _ Connection:=strConexion, _ SQLStatement:=strSql, _ SQLStatement1:="" 'Edito el documento .EditMainDocument objWord.Parent.Selection.HomeKey Unit:=wdStory objWord.Parent.Selection.EndKey Unit:=wdLine 'Le agrego el campo Nombre .Fields.Add Range:=objWord.Parent.Selection.Range, _ Name:="Nombre" 'Le dijo que envie por correo el documento combinado .Destination = wdSendToEmail .MailAsAttachment = False 'Le dijo que campo tiene la direccion de correo .MailAddressFieldName = "Correo" .MailSubject = strTitulo .SuppressBlankLines = True 'Le dijo que envie todos With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With 'Ejecuto la combinacion .Execute Pause:=False End With End With 'Ssalgo de Word objWord.Parent.Application.Quit 0 'Libero la memoria Set objWord = Nothing MsgBox "Proceso terminado con exito", , "Envio de correo" End Sub