Gracias a Katherine que envió la pregunta para el consejo de Excel de esta semana:
Quiero colocar un botón de formulario en una hoja de cálculo de Excel que, al hacer clic, enviará por correo electrónico la misma hoja de cálculo de Excel a alguien.
Para enviar el libro completo a [email protected] con una línea de asunto en particular, debe usar esta macro de Excel.
Sub SendIt() Application.Dialogs(xlDialogSendMail).Show arg1:="[email protected]", _ arg2:="This goes in the subject line" End Sub
Hay un icono de la barra de herramientas que le permite agregar un botón de comando. Siga estos pasos para agregarlo a una barra de herramientas existente:
- Ver> Barras de herramientas> Personalizar
- Haga clic en la pestaña de comandos
- En el cuadro Categoría, desplácese hacia abajo hasta Control Toolbox
- En el cuadro de comandos, desplácese hacia abajo hasta el botón de comando
- Haga clic en el botón de comando, arrástrelo hacia arriba y suéltelo en una barra de herramientas existente
- Descarte el cuadro de diálogo Personalizar presionando Cerrar
Ahora que tiene el icono del botón de comando: haga clic en el icono. Arrastre su hoja de trabajo para crear el botón. Hágalo tan grande o tan pequeño como desee. Excel le pedirá que asigne una macro al botón. Elija SendIt. Haga clic y arrastre para resaltar la palabra Botón 1 en el botón. Escriba algo como "Enviar este archivo por correo electrónico". Haga clic fuera del botón y estará listo para comenzar. Si alguna vez necesita reasignar la macro adjunta a ese botón, haga clic derecho en el botón y elija asignar macro.
¿Qué sucede si tiene una gran lista de información que desea distribuir a varios usuarios, pero solo desea que cada usuario vea su propia información? A continuación se muestra una macro un poco más compleja que hará esto. A la derecha hay una lista de muestra de ventas para tres regiones.
Antes de escribir la macro, configure el libro de trabajo de la siguiente manera:
- Copie la hoja de trabajo de datos haciendo clic derecho en la pestaña de datos, seleccione "mover o copiar", marque "crear una copia", OK. Cambie el nombre de esta nueva hoja de trabajo a "Informe". Puede cambiar el nombre de una hoja haciendo clic derecho en la pestaña, seleccionando "renombrar" y luego escribiendo Informe.
- En la pestaña del informe, elimine todas las filas de datos. Conserve solo los encabezados y títulos.
- Inserte una nueva hoja de trabajo con estas columnas: Región, Destinatario. En esta hoja de trabajo, escriba el nombre de cada región y el usuario que debe recibir el informe. Cambie el nombre de esta hoja de trabajo a "Distribución".
Aquí está la macro. Las líneas que comienzan con apóstrofos (') son comentarios diseñados para ayudarlo a seguir el flujo.
Public Sub SendItAll() ' Clear out any old data on Report Sheets("Report").Select Range("A1").CurrentRegion.ClearContents ' Sort data by region Sheets("Data").Select Range("A1").CurrentRegion.Select Selection.Sort Key1:=Range("A2"), Header:=xlYes ' Process each record on Distribution Sheets("Distribution").Select FinalRow = Range("A15000").End(xlUp).Row For i = 2 To FinalRow Sheets("Distribution").Select RegionToGet = Range("A" & i).Value Recipient = Range("B" & i).Value ' Clear out any old data on Report Sheets("Report").Select Range("A1").CurrentRegion.ClearContents ' Get records from Data Sheets("Data").Select Range("A1").CurrentRegion.Select ' Turn on AutoFilter, if it is not on If ActiveSheet.AutoFilterMode = False Then Selection.AutoFilter ' Filter the data to just this region Selection.AutoFilter Field:=1, Criteria1:=RegionToGet ' Select only the visible cells and copy to Report Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Destination:=Sheets("Report").Range("A1") ' Turn off the Autofilter Selection.AutoFilter ' Copy the Report sheet to a new book and e-mail Sheets("Report").Copy Application.Dialogs(xlDialogSendMail).Show _ arg1:=Recipient, _ arg2:="Report for " & RegionToGet ActiveWorkbook.Close SaveChanges:=False Next i End Sub