Благодарим на Катрин, която изпрати въпроса за съвета за 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
- В полето за команди превъртете надолу до бутона за команди
- Щракнете върху командния бутон и го плъзнете нагоре и го пуснете в съществуваща лента с инструменти
- Отхвърлете диалоговия прозорец Персонализиране, като натиснете Затвори
Сега, когато имате иконата на командния бутон: Щракнете върху иконата. Плъзнете в работния си лист, за да създадете бутона. Направете го толкова голям или толкова малък, колкото искате. Excel ще ви помоли да присвоите макрос на бутона. Изберете SendIt. Щракнете и плъзнете, за да маркирате думата Бутон 1 на бутона. Въведете нещо като "Изпратете този файл по имейл". Щракнете извън бутона и сте готови за работа. Ако някога се наложи да преназначите макроса, прикрепен към този бутон, щракнете с десния бутон върху бутона и изберете присвояване на макрос.

Какво ще стане, ако имате голям списък с информация, която искате да разпространите до определен брой потребители, но искате само всеки потребител да вижда собствената си информация? По-долу има малко по-сложен макрос, който ще направи това. Вдясно е примерен списък на продажбите за три региона.
Преди да напишете макроса, настройте работната книга, както следва:

- Копирайте работния лист с данни, като щракнете с десния бутон върху раздела с данни, изберете „преместване или копиране“, поставете отметка „създайте копие“, OK. Преименувайте този нов работен лист в „Отчет“. Можете да преименувате лист, като щракнете с десния бутон върху раздела, изберете „преименуване“, след което напишете Report.
- В раздела за отчет изтрийте всички редове с данни. Запазете само заглавията и заглавията.

- Поставете нов работен лист с тези колони: Регион, Получател. На този работен лист въведете името на всеки регион и потребителя, който трябва да получи отчета. Преименувайте този работен лист в „Разпределение“.
Тук е макросът. Редовете, които започват с апострофи ('), са коментари, предназначени да ви помогнат да проследите потока.
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