Спасибо Кэтрин, которая прислала вопрос для совета по Excel на этой неделе:
Я хочу разместить кнопку формы на листе Excel, при нажатии на которую тот же лист Excel будет отправлен кому-то по электронной почте.
Чтобы отправить всю книгу на [email protected] с определенной строкой темы, вы должны использовать этот макрос Excel.
Sub SendIt() Application.Dialogs(xlDialogSendMail).Show arg1:="[email protected]", _ arg2:="This goes in the subject line" End Sub
На панели инструментов есть значок, позволяющий добавить командную кнопку. Выполните следующие действия, чтобы добавить его на существующую панель инструментов:
- Просмотр> Панели инструментов> Настроить
- Щелкните вкладку команд
- В поле Категория прокрутите вниз до Control Toolbox.
- В поле команд прокрутите вниз до кнопки Command
- Нажмите кнопку команды, перетащите ее вверх и поместите на существующую панель инструментов.
- Закройте диалоговое окно "Настройка", нажав "Закрыть"
Теперь, когда у вас есть значок командной кнопки: Щелкните значок. Перетащите рабочий лист, чтобы создать кнопку. Сделайте его настолько большим или маленьким, насколько хотите. Excel попросит вас назначить макрос для кнопки. Выберите SendIt. Щелкните и перетащите, чтобы выделить слово «Кнопка 1» на кнопке. Введите что-нибудь вроде «Отправить этот файл по электронной почте». Щелкните за пределами кнопки, и вы готовы к работе. Если вам когда-либо понадобится переназначить макрос, прикрепленный к этой кнопке, щелкните кнопку правой кнопкой мыши и выберите назначить макрос.

Что делать, если у вас есть большой список информации, которую вы хотите распространить среди нескольких пользователей, но вы хотите, чтобы каждый пользователь видел только свою информацию? Ниже приведен более сложный макрос, который сделает это. Справа - примерный список продаж для трех регионов.
Перед написанием макроса настройте книгу следующим образом:

- Скопируйте рабочий лист данных, щелкнув правой кнопкой мыши вкладку данных, выберите «переместить или скопировать», отметьте «создать копию», ОК. Переименуйте этот новый рабочий лист в «Отчет». Вы можете переименовать лист, щелкнув вкладку правой кнопкой мыши, выбрав «переименовать» и набрав «Отчет».
- На вкладке отчета удалите все строки данных. Оставьте только заголовки и заголовки.

- Вставьте новый лист со следующими столбцами: Регион, Получатель. На этом листе введите название каждого региона и пользователя, который должен получить отчет. Переименуйте этот лист в «Распространение».
Вот макрос. Строки, начинающиеся с апострофа ('), представляют собой комментарии, призванные помочь вам следить за ходом текста.
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