Первое знакомство с редактором VBA Excel, создание процедур (подпрограмм) и написание простейшего кода, работающего с переменными и ячейками рабочего листа.
Начинаем программировать с нуля
Часть 1. Первая программа
[Часть 1] [Часть 2] [Часть 3] [Часть 4]
Эта статья предназначена для тех, кто желает научиться программировать в VBA Excel с нуля. Вы увидите, как это работает, и убедитесь, что не все так сложно, как кажется с первого взгляда. Свою первую программу вы напишите за 7 простых шагов.
- Создайте новую книгу Excel и сохраните ее как книгу с поддержкой макросов с расширением .xlsm. В старых версиях Excel по 2003 год – как обычную книгу с расширением .xls.
- Нажмите сочетание клавиш «Левая_клавиша_Alt+F11», которое откроет редактор VBA. С правой клавишей Alt такой фокус не пройдет. Также, в редактор VBA можно перейти по ссылке «Visual Basic» из панели инструментов «Разработчик» на ленте быстрого доступа. Если вкладки «Разработчик» на ленте нет, ее следует добавить в настройках параметров Excel.
В левой части редактора VBA расположен проводник проекта, в котором отображены все открытые книги Excel. Верхней строки, как на изображении, у вас скорее всего не будет, так как это – личная книга макросов. Справа расположен модуль, в который записываются процедуры (подпрограммы) с кодом VBA. На изображении открыт модуль листа, мы же далее создадим стандартный программный модуль.
- Нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку после значка Excel на панели инструментов.
После нажатия кнопки «Module» вы увидите ссылку на него, появившуюся в проводнике слева.
Первая программа на VBA Excel
Добавляем на стандартный модуль шаблон процедуры – строки ее начала и завершения, между которыми мы и будем писать свою первую программу (процедуру, подпрограмму).
- Откройте стандартный модуль двойным кликом по его ссылке в проводнике. Поместите в него курсор и нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.
В результате откроется окно добавления шаблона процедуры (Sub).
- Наберите в поле «Name» имя процедуры: «Primer1», или скопируйте его отсюда и вставьте в поле «Name». Нажмите кнопку «OK», чтобы добавить в модуль первую и последнюю строки процедуры.
Имя процедуры может быть написано как на латинице, так и на кириллице, может содержать цифры и знак подчеркивания. Оно обязательно должно начинаться с буквы и не содержать пробелы, вместо которых следует использовать знак подчеркивания.
- Вставьте внутрь шаблона процедуры следующую строку:
MsgBox "Привет"
.
Функция MsgBox выводит информационное сообщение с указанным текстом. В нашем примере – это «Привет».
- Проверьте, что курсор находится внутри процедуры, и запустите ее, нажав клавишу «F5». А также, запустить процедуру на выполнение можно, нажав на треугольник (на изображении под пунктом меню «Debug») или на кнопку «Run Sub/UserForm» во вкладке «Run» главного меню редактора VBA Excel.
Если вы увидели такое сообщение, как на изображении, то, поздравляю – вы написали свою первую программу!
Работа с переменными
Чтобы использовать в процедуре переменные, их необходимо объявить с помощью ключевого слова «Dim». Если при объявлении переменных не указать типы данных, они смогут принимать любые доступные в VBA Excel значения. Комментарии в тексте процедур начинаются со знака «’» (апостроф).
Пример 2
Присвоение переменным числовых значений:
Public Sub Primer2() ‘Объявляем переменные x, y, z Dim x, y, z ‘Присваиваем значение переменной x x = 25 ‘Присваиваем значение переменной y y = 35 ‘Присваиваем переменной z сумму ‘значений переменных x и y z = x + y ‘Выводим информационное сообщение ‘со значением переменной z MsgBox z End Sub |
Пример 3
Присвоение переменным строковых значений:
Public Sub Primer3() ‘Объявляем переменные x, y, z Dim x, y, z ‘Присваиваем строку переменной x x = «Добрый» ‘Присваиваем строку переменной y y = «день!» ‘Присваиваем переменной z строку, ‘состоящую из строк x и y ‘с пробелом между ними z = x & » « & y ‘Выводим информационное сообщение ‘со значением переменной z MsgBox z End Sub |
Скопируйте примеры процедур в стандартный модуль и запустите их на выполнение.
Изменение содержимого ячеек
Для обозначения диапазонов, в том числе и отдельных ячеек, в VBA Excel имеется ключевое слово «Range». Ячейке A1 на рабочем листе будет соответствовать выражение Range("A1")
в коде VBA Excel.
Пример 4
Public Sub Primer4() ‘Объявляем переменную x Dim x ‘Присваиваем значение переменной x x = 125.61 ‘Присваиваем ячейке A1 ‘значение переменной x Range(«A1») = x ‘Присваиваем значение ячейке B1 Range(«B1») = 356.24 ‘Записываем в ячейку C1 ‘сумму ячеек A1 и B1 Range(«C1») = Range(«A1») + Range(«B1») End Sub |
Скопируйте процедуру этого примера в стандартный модуль и запустите на выполнение. Перейдите на активный рабочий лист Excel, чтобы увидеть результат.
Перейти к содержанию
На чтение 3 мин Опубликовано 27.10.2015
Это краткое пошаговое руководство предназначено для начинающих пользователей и рассказывает о том, как вставлять код VBA (Visual Basic for Applications) в книгу Excel, и как запускать вставленный макрос для выполнения различных задач на этом листе.
Большинство пользователей не являются гуру Microsoft Office. Они могут не знать всех тонкостей работы той или иной функции, и не смогут ответить на вопрос, как отличается скорость выполнения макроса VBA в Excel 2010 и 2013. Многие просто используют Excel, как инструмент для обработки данных.
Предположим, нужно изменить данные на листе Excel определённым образом. Мы немало погуглили и нашли макрос VBA, который решает эту задачу. Однако, наше знание VBA оставляет желать лучшего. Вот тут-то и придёт на помощь пошаговая инструкция, с помощью которой мы сможем использовать найденный код.
- Вставляем код VBA в книгу Excel
- Запускаем макрос VBA в Excel
Вставляем код VBA в книгу Excel
В этом примере мы будем использовать VBA макрос, который удаляет переносы строк из ячеек текущего листа Excel.
-
- Открываем рабочую книгу в Excel.
- Нажатием Alt+F11 вызываем окно редактора Visual Basic
- На панели Project-VBAProject кликаем правой кнопкой мыши по имени рабочей книги (в левой верхней части окна редактора) и в контекстном меню выбираем Insert > Module.
- Копируем код VBA (с веб-страницы или из другого источника) и вставляем его в правую область редактора VBA (окно Module1).Подсказка: Как увеличить скорость выполнения макроса?
В самом начале кода Вашего макроса VBA должны содержаться строки:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Если таких строк нет, то обязательно добавьте следующие строки в свой макрос, чтобы он работал быстрее (см. рисунок выше):
- В самое начало кода после всех строк, начинающихся с Dim (если строк, начинающихся с Dim нет, то вставляем сразу после строки Sub):
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
- В самый конец кода, перед End Sub:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Эти строки, как можно понять из их содержания, отключают обновление экрана и пересчёт формул рабочей книги перед выполнением макроса. После выполнения кода эти параметры снова включаются. Данный приём приводит к ускорению выполнения макроса от 10% до 500% (да, макрос может работать в 5 раз быстрее, если манипуляции над ячейками происходят без лишних остановок).
- В самое начало кода после всех строк, начинающихся с Dim (если строк, начинающихся с Dim нет, то вставляем сразу после строки Sub):
- Сохраняем рабочую книгу, как книгу Excel с поддержкой макросов. Для этого нажмите Ctrl+S и в окне с предупреждением Следующие компоненты невозможно сохранить в книге без поддержки макросов (The following features cannot be saved in macro-free workbook) нажмите Нет (No).Откроется диалоговое окно Сохранение документа (Save as). В выпадающем списке Тип файла (Save as type) выбираем Книга Excel с поддержкой макросов (Excel macro-enabled workbook) и нажимаем кнопку Сохранить (Save).
- Нажимаем Alt+Q, чтобы закрыть окно редактора VBA и вернуться к книге Excel.
Запускаем макрос VBA в Excel
Чтобы запустить только что добавленный макрос, нажмите Alt+F8. Откроется диалоговое окно Макрос (Macro). В списке Имя макроса (Macro name) выберите нужный макрос и нажмите кнопку Выполнить (Run).
Оцените качество статьи. Нам важно ваше мнение:
Как в Excel 2010 или 2013 вставить и запустить код VBA – руководство для начинающих
Смотрите также _ «C:UsersCDesktopFOLDER» Workbooks.OpenIvanOKЮрий МХоть Жераром Депардье все твои сообщения этом. Как только файл с несовпадающимзы. кстати, везде,’ Returns collection Ned_Poriv() exl =а это читали:
по его использованиюОкно(Sheet); Basic, как показаноApplication.ScreenUpdating = FalseЭто краткое пошаговое руководство Filename:= _ «C:UsersÍDesktopFOLDERFILENew.xls»:: Кирилл, а рекордер или психом в выискивая в них Михаилу потребуется изменить именем — нужный где возможно, я files of folder
CreateObject(«excel.application») exl.Workbooks.Open(Filename:=»C:Documents and’111 это пароль (в приложении) :WatchesКод более общего характера на картинке ниже.Application.Calculation = xlCalculationManual предназначено для начинающих on error gotoIvanOK упорно пишет ChDir белой рубашке с «перлы» а ля что-то в коде,
- повторюсь: моя функция тоже предпочитаю однострочный
- ’ SettingsСемРабочий столExcel.xls») exl.Sheets(«Період2»).Select()
Вставляем код VBA в книгу Excel
на открытие файла,[ссылка заблокирована потакже очень помогает должен быть введён Имейте ввиду, чтоВ самый конец кода,
-
- пользователей и рассказывает 0 дальше код
- , На горе программист: )) пеной у рта nerv? Хочешь быть
- ему придется ковырять абстрагируется от (свой, If.’ @param {String} exl.visible = True 11 это пароль решению администрации проекта] при отладке кода в окно Excel остается перед о том, как работы с открытым
- ThisWorkbook.Windows.Application.Visible = FalseKL (в ваших глазах). нарциссом — ради всю логику, в чужой и т.п.).Vitalts Path The path exl.Sheets(«71010000»).Select() exl.Cells.Select() exl.Selection.Delete(Shift:=xlUp) на изменеиеS_e_m
VBA, так какModule открытым и находится
End Sub
вставлять код VBA
файломно очевидно, что, UserForm1.Show: Юр, ну мало Моя точка зрения Бога. Растеряешь друзей. т.ч. логику получения
- Она просто возвращает: to folder exl.Sheets(«Період1»).Select() exl.Cells.Select() exl.Selection.Copy()Вы что тоже: Ребята, подскажите как в нём можно; позади окна редактора.: (Visual Basic for
если ошибки при
eagl69
- ли что на останется при мнеRAN имени файла из
список файлов папки.
Michael_S
’ @param {String} exl.Sheets(«71010000»).Select() exl.Cells.Select() exl.ActiveSheet.Paste() создали файл с открывается книга Excel увидеть значение, типКод для нового объектаВ процессе работы вApplication.ScreenUpdating = True Applications) в книгу обращении по 1: заборах пишут. РекордерЦитата: Саш, это, конечно папки. В моем При желании может, что значит не [Filter] The file
- Она просто возвращает: to folder exl.Sheets(«Період1»).Select() exl.Cells.Select() exl.Selection.Copy()Вы что тоже: Ребята, подскажите как в нём можно; позади окна редактора.: (Visual Basic for
- exl.Rows(«1:1»).Select() exl.Range(Selection, Selection.End(xlDown)).Select() такими паролями?? плагиат 2003 c указанного и контекст любого должен быть введён редакторе Visual BasicApplication.Calculation = xlCalculationAutomatic Excel, и как пути нет, тоinv.DS еще и Select(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты откатись чуть правильно случае это не делать это рекурсивно. хочет? Без кода filter exl.Application.CutCopyMode = False какой-то, деньги автору места. отслеживаемого выражения, которое в в Excel могутЭти строки, как можно запускать вставленный макрос как избежать обращения, обожает назад, и взгляни
- но вся проблема требуется, т.к. вынесеноФункцию можно подключить я не могу’ @return {Collection} exl.Selection.Sort(Key1:=Range(«E1»), Order1:=xlAscending, Header:=xlGuess,
Запускаем макрос VBA в Excel
пароля??? ))Наперед СПАСИБО!!! задаст пользователь. ЧтобыClass Module быть открыты различные понять из их для выполнения различных ко второму пути?inv.DSЮрий М на свои коды. в том -
в функцию. Если и не вносить
сказать где у
FileList
_ OrderCustom:=1, MatchCase:=False,
office-guru.ru
Редактор Visual Basic в Excel
S_e_mЦипихович Эндрю открыть окно; окна. Управление окнами содержания, отключают обновление задач на этомспасибо за советы., неа ефекто тот: ))И переменные из что она одна,
Запуск редактора Visual Basic
ему потребуется проверять существенных изменений в вас ошибка, ибо’ —————————————- Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal): Так открывается с: в ВБА так:WatchesЕсли нужно создать диалоговое осуществляется в меню экрана и пересчёт листе.МатросНаЗебре же….Assassinys одной буквы, и но для всех вложенные каталоги, ему основную программу (добавляется
Окна редактора Visual Basic
код замечательно работает.Private Function GetFileList(ByVal ‘oExcel.Workbooks.Add() ‘oExcel.Sheets.Add.Name = этими паролями иSet oExcel =, нажмите окно для взаимодействия View, которое находится формул рабочей книгиБольшинство пользователей не являются:
Окно проекта (Project)
нужно сделать до: Собственно меня интересует Iif сплошь и разная! придется писать новый одна строка вызова Ни один год Path As String, ComboBox1.Text End Sub без них. Загвоздка CreateObject(«Excel.Application») ‘создать объектWatch Window с пользователем, то в верхней части перед выполнением макроса. гуру Microsoft Office.
- If Err <> 0 sub workbook_open() иначе как возможно открыть рядом, и еще
- Ты откатись чуть алгоритм (перебирать всю функции). пользуюсь подобными методами. _
End ModuleПосле запуска в том, что Microsoft Excel oExcel.Workbooks.Openв меню можно использовать окна редактора VBA. После выполнения кода Они могут не Then ефект полюбому останется…. форму в документе куча всего, что назад, и взгляни логику, вносить изменения,ЦитатаПопробуйте вывести названиеOptional ByVal Filter в конце строки
я дальше хочу «D:Рабочая папка» &ViewUserform Ниже дано описание эти параметры снова знать всех тонкостейall L
- потому что сначала эксель но так ты сейчас критикуешь! на свои коды. отлаживать и т.п.(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Я уж не файла, который пытаетесь
- As String = 27 выдаёт ошибку выделить какой-то диапазон Имя_файла, , ,редактора Visual Basic.. отдельных окон. включаются. Данный приём работы той или: Попробуем. спасибо!
открываеться ексель а что бы былав том тоИ переменные из всю программу, а говорю о размере открыть, возможно, лимит
- «*») As Collection —- ячеек и копировать , «111», «11» Также окноДвойной щелчок мышью по
- Окно приводит к ускорению иной функции, иSanja потом он выполняет видна только форма
- и дело. Я одной буквы, и не отдельную функцию). кода. исчерпан, и идет
- Static List AsObject variable or With их, а мне ‘111 это парольWatches
- любому объекту вProject выполнения макроса от не смогут ответить: :?: макрос
Окно кода (Code)
при открытии документа сам делал так Iif сплошь иЕсли вы предпочитаетеКачество кода не попытка открыть файл New Collection block variable not выдает ошибку на: на открытие файла,будет открыто автоматически, окнеоткрывается в левой 10% до 500%
на вопрос, какIf Err <>IvanOK а сам документ (писал ужасный, говеный рядом, и еще закладывать фундамент дома измеряется его размером. с пустым названием.
Окно свойств (Properties)
Static FSO As set.Range 11 это пароль если задать отслеживаемоеProject части редактора VBA (да, макрос может отличается скорость выполнения 0 Then PathName, Вы бредите! Все был скрыт или код) и не
Окно отладчика (Immediate)
куча всего, что из спичек, я Вообще, не понимаю, Не совершенство кода, Object—(«A8:C7»).Select Ощущение, что на изменеие ‘oExcel.Workbooks.Open выражение.открывает соответствующее окно (показано на картинке работать в 5 макроса VBA в = ChDir(«Y:PublicFolder1») Else работает у меня свернут? хочу, чтобы кто-нибудь ты сейчас критикуешь! не против, но почему форумчан беспокоит
написанного на скоруюStatic Deep AsТакже в 29 книга «AIC_SIP» активна «D:Рабочая папка» &Чтобы задать отслеживаемое выражение,Code выше). В этом раз быстрее, если
Окно переменных (Locals)
Excel 2010 и PathName = ChDir(«C:UsersCDesktopFOLDER») остается только 1аналитика еще наступал наМне Вася уронил сам стараюсь этого размер (не только руку :( Integer строке (потому что окрыта), Имя_файла, , , нужно:, предназначенное для ввода окне для каждой манипуляции над ячейками 2013. Многие просто End If Workbooks.Open форма активная, сам: в модуль «ЭтаКнига»:
Окно отслеживания (Watches)
эти грабли. Это молоток на голову! не делать этого) кода, еслиСудя по скрину,Dim SubFolder AsRange а Лист1 не ,111, 11 ‘111Выделить выражение в редактируемом кода VBA с открытой рабочей книги происходят без лишних используют Excel, как Filename:=PathName & «FILENew.xls» Excel прячется.sub workbook_open() application.visible=false ж очевидно )И что выЦитата код написан должным так и есть.
ObjectОшибка 1 «System.Data.Range»
- активный и не это пароль на
- коде VBA. клавиатуры. На одном создаётся проект VBA остановок). инструмент для обработки
- Kuzmichinv.DS yourform.show end sub
deathogre ему сказали?(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати и скорость образом? Подключили, забыли. Приведите кодDim Folder As в этом контексте хочет с ним
открытие файла, 11В меню
из приведённых выше
(VBA Project). Проект
Сохраняем рабочую книгу, как
office-guru.ru
Как открыть visual basic через excel в office 2007?
данных.: Используйте диалоговое окно
, ето вы простоAssassinys
: Здрасьте. Как программноТы…, Вася…, неправ!!!!!!!!! тоже от длинны
Если хотите поMichael_S Object
недоступен, так как контачить.
это пароль наDebug рисунков показано окно
VBA – это книгу Excel сПредположим, нужно изменить данные выбора файла
не замечаете не: не работает( открыть книгу эксельnerv
не всегда зависит прежнему заниматься ручной: Vitalts, Все, разобрался.
Dim File As является «Friend».Спасибо что отозвались изменеие oExcel.Visible =редактора VBA нажать
Как в excel открыть visual basic???
кода для набор всех объектов поддержкой макросов. Для на листе Excel
Set FD = Application.FileDialog(msoFileDialogFilePicker) мощном ПК, а
Assassinys и сохранить эту: об единственной опечаткезависит от алгоритма, обсфукацией, экономить на Не туда Objectdzug (ещё раз) True ‘FalseНеужели вQuick WatchModule1 и модулей VBA, этого нажмите
определённым образом. Мыall L я говорю делоВ
: книгу (объект) в я предупредил сразу. а не от
каждой букве, пожалуйста.Set wb = Workbooks.Open(ActiveWorkbook.Path
Открытие Excel и активация нужного листа
If FSO Is: Посмотрите это:Ципихович Эндрю ВБ не так??.
.
привязанных к текущейCtrl+S
немало погуглили и: Kuzmich, Sanja, спасибо продолжение темы:Assassinys глобальной переменной? Это раз. Два, кол-ва букв )Я пишу универсальные & «» & Nothing ThenОбработка активной книги: Это решено???????? и проверьте, отпишитесь, ОК??НажатьПо мере ввода кода книге. Изначально ви в окне нашли макрос VBA, за советы. НачнуPrivate Sub CommandButton8_Click()
, работает.Юрий М кто-то не знает,Цитата функции, кот. таскаю fn)Set FSO = Excel ладно …S_e_mAdd VBA в окно него входят: с предупреждением который решает эту с предложения Sanja Application.Visible = FalseКод надо поместить
: 1. Открытие нужной что от него(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Мы все тут
(использую) из проектавпихивал. CreateObject(«Scripting.FileSystemObject»)S_e_mздесь: Всё так. Только.CodeОбъектСледующие компоненты невозможно сохранить задачу. Однако, наше (для сохранения «молчаливой» End Sub Private куда и сказано книги запишите макрорекордером хочет компилятор при хотим размер покороче в проект. МнеЕще раз спасибо.End If: Ничего не помогает.Windows(«AIC_SIP.xls»).Activate ‘активация моего я, пока, чайникКроме рассмотренных, в меню, редактор Visual BasicЭтаКнига в книге без знание VBA оставляет работы процедуры), если Sub CommandButton9_Click() Application.Visible - — получите готовый
200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Expicit и даже соревнуемся это не мешаетnervIf FSO.FolderExists(Path) Then Не получается у файла Range(«A1:C3»).Select ‘выбираю и совсем недавно редактора Visual Basic следит за правильностью(ThisWorkbook), привязанный к
поддержки макросов желать лучшего. Вот
не подойдет, то = True End
в модуль «Эта книга» код.
я тут не
в этом постоянно
) Если вам: просто вы неSet Folder = меня сортировка. Уже
диапазон ячеек Selection.Copy начал изучать язык в Excel существует ввода, ищет ошибки книге Excel;
(The following features тут-то и придёт окно выбора файла SubЛист скрывается аyourform2. Dim Wb при чем ) в специально созданном нравиться каждый раз писали МНОГО кода FSO.GetFolder(Path) кучу сайтов перелазил ‘копируюв переди пробуйте программирования, а тут ещё множество параметров в коде иОбъекты cannot be saved
на помощь пошаговая уж точно поможет.
вот при открытиизаменить на свое, As Workbook Set
Цитата
для этого разделе переписывать весь код,Когда перед тобойFor Each File — не могу
добавлять oExcel. ещё по работе
и команд, используемых выделяет код, который
Лист in macro-free workbook) инструкция, с помощью
вопрос, думаю, закрыт. появляется еще какой
например, у меня Wb = ActiveWorkbook(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ты упорно пытаешьсяза рекламу 5 я не против 1000+ строк в In Folder.Files разобраться.то есть как нужно было… Короче при создании, выполнении требует исправления.(Sheet), привязанные к нажмите которой мы сможем Спасибо. то лист пустойUserform1Hugo
доказать всем участникамMichael_SSerge_007 одном только модуле,If File.Name LikeMichael_S Вы здесь обращались:
получилось, но открывает
и отладке кодаВ окне каждому листу текущейНет использовать найденный код.
Александр Моторинall LAleksey1404: Set wb = темы
: У каждого свои: Точно так же нет желания разбирать Filter Then: Все, что обoExcel.Visible = True не из всех
VBA.Properties рабочей книги Excel.(No).Вставляем код VBA в: А где находится: Добрый день,: Да заработало , Workbooks.Open(filename)я отстаиваю свою понятия «правильности» как и формул. и додумывать. ХочетсяList.Add File этом файле известно ‘False папок. С некоторыхУрок подготовлен для Васперечислены свойства объекта,Самостоятельно в проект можноОткроется диалоговое окно книгу Excel сам файл?Подскажите, можно ли я просто имяdeathogre точку зренияСаш, мы уже Кстати и скорость просто читать. МаксимальноEnd If — он находитсяS_e_m
папок выдаёт ошибку, командой сайта office-guru.ru который в момент добавить объектыСохранение документаЗапускаем макрос VBA вЕсли рядом с
решить такую задачу: формы некорректное выбирал
: Мне нужно открытьЦитата
как-то говорили на тоже от длинны быстро читать понятныйNext в той же: Я уже на что нету доступа.
CyberForum.ru
Открыть файл excel. (VBA) (Задача вроде простая, но…)
Источник: http://www.excelfunctions.net/Visual-Basic-Editor.html создания (не вUserform(Save as). В Excel нужным файлом, тоРаботаю с файлом,Апострофф книгу из другой(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>и правда думаешь, эту тему; твои не всегда зависит не двусмысленный код.For Each SubFolder папке, где и
пике восторга Если знаете в
Перевел: Антон Андронов процессе выполнения программы),
выпадающем спискеВ этом примере мы ActiveWorkbook.Path поможет в котором прописана: А как обратно
книги
что кому-то интересно доводы отчасти верны,
Однако ты прав,
"С недавних пор" In Folder.SubFolders
основной, и другихПолучилось, как Вы
чем проблема, отпишитеАвтор: Антон Андронов
выделен в окне
Module
Тип файла
будем использовать VBA
all L VBA-процедура, на работе открыть файл дляЮрий М
искать все твои но не для форумчан это очень
однострочный If я
Deep = Deep файлов в этой сказали. Вот так пожалуйста. А пока,
Виталик александровский проекта. Эти свойстваи(Save as type)
макрос, который удаляет: Нет, Александр, не и дома.
редактирования (((
: И что? сообщения выискивая в
всех случаев.
беспокоит
не использую вообще + 1
папке нет. И
Set oExcel = очень благодарен за: Alt плюс F11
могут быть различнымиClass Module выбираем
переносы строк из с нужным. Спасибо.
Процедура эта в
Aleksey1404deathogre них "перлы" а
Michael_SМы все тут )
GetFileList SubFolder.Path, Mask что он -
CreateObject("Excel.Application") 'создать объект помощь!!!
Gkp090 в зависимости от
. Если Вы посмотритеКнига Excel с поддержкой
ячеек текущего листаRAN
процессе работы обращается: Разве не очевидно?
: Объявил глобальную переменную ля nerv?
: То же не хотим размер покороче
Цитата
Next
эксель. Ни имя Microsoft Excel oExcel.Workbooks.Open
В принципе разобрался: VBA
типа выделенного объекта на картинку выше,
макросов
Excel.
: Не тестировал, но
к еще одному Application.Visible = True
в модуле ЭтаКнигаесли мне говорят,
работает
и даже соревнуемся
(Michael_S)200?'200px':''+(this.scrollHeight+5)+'px');">жалуется на MaskDeep = Deep
и расширение файла,
"C:Documents and SettingsS_e_mРабочий с открытием, но
в настройках выставить (лист, книга, модуль
то увидите, что(Excel macro-enabled workbook)
Открываем рабочую книгу в на правду похоже
файлу (открывает его,
Апострофф
Public Главнейшая As
что я неnerv в этом постоянноЭто та самая
— 1 а также имя столAC_SIP222″ & xls тут проблема дальше «Показывать вкладку Разработчик и другие). в проект VBA и нажимаем кнопку
Excel.Sub Мяу() Dim производит определенные действия),: Может есть какое-то Workbookоткрыл книгу в прав, я спрашиваю: Захотелось кнопку «Ok» в специально созданном
ошибка, о кот.End If и расположение папки ‘открываю книгу 222
Private Sub Command1_Click() на ленте»Окно для книги
СохранитьНажатием wb As Workbook который на работе сочетание клавиш, позволяющее модуле АктивХ формы в чем, а нажать для этого разделе
я говорил. Замените
If Deep = не известны. oExcel.Visible = True Set oExcel =
Александр кImmediateBook1.xlsm(Save).Alt+F11 Dim pName(), fName$, лежит на диске открыть файл безChDir «\Margo123Тест» Workbooks.Open не заведомо соглашаюсьТам же написано
KuklP Mask на Filter. -1 ThenВозможно? Если возможно ‘False oExcel.Range(«B5:E13»).Select ‘выбираю CreateObject(«Excel.Application») ‘ñîçäГ*ГІГј îáúåêò: На вкладке Разработчикможно отобразить вдобавлен объект
Нажимаемвызываем окно редактора i& pName =
Y, дома на отработки макроса(shift не Filename:=»\Margo123Тест6.02.2016.xlsm» Set ЭтаКнига.ГлавнейшаяЦитата «Переменная не определена»: Еще как измеряется.Цитата
Set GetFileList =
— как? диапазон ячеек oExcel.Selection.Copy Microsoft Excel oExcel.Workbooks.Open щелкните Visual Basic. редакторе Visual BasicModuleAlt+Q Visual Basic Array(«Y:PublicFolder1», «C:UsersCDesktopFOLDER» fName диске С. Имя помогает), т.к. у = Workbooks(«\Margo123Тест6.02.2016.xlsm»)выдает ошибку(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Растеряешь друзей. и даже выделено Можно написать на
(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>В данном случае, List
nerv ‘копирую oExcel.Workbooks.Open «C:Documents «C:111AIC_SIP» & AIC_SIP,Если Вкладка Разработчик
через менюс названием, чтобы закрыть окноНа панели = «хи-хи.xls» On файла одинаковое, пути меня отображается форма,
на 3 строке,т.е. если наши какая. Что мешает
10 страниц «правильного» мне караз такиSet List =: Получить список файлов and SettingsS_e_mРабочий столAC_SIP111″
, , , не отображена:ViewModule1 редактора VBA иProject-VBAProject Error Resume Next к нему разные. но я не
Run-time error 9 мнения не совпадают, объявить? Это же кода, а можно
было удобнее воспользоваться Nothing папки & xls ‘открываю 111, 11 ‘111Нажмите кнопку Microsoft>. вернуться к книгекликаем правой кнопкой
Do While wbСейчас обращение к могу добавить код Subscript out of то я уже пример ) то же действие
однострочным if, дабыSet FSO =Vitalts другую книгу 111
ГЅГІГ® ГЇГ*ðîëü Г*Г* Office, а затемImmediate WindowВот как можно создать Excel. мыши по имени = Nothing Set
этому файлу выглядит по причине отсутствия range автоматически не друг,Цитата описать одной строкой.
не закрывать, а Nothing: Все названия Excel oExcel.Visible = True
îòêðûòèå ГґГ*éëГ*, 11 — Параметры Excel.или нажатием комбинации новый объектЧтобы запустить только что рабочей книги (в wb = Workbooks.Open(Filename:=pName(i) следующим образом: окна екселя… кодЮрий М потому, что «мнения(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>У каждого свои
Что легче можно перенос для наглядности.Deep = 0 файлов в папке ‘False oExcel.Range(«A1»).Select ‘Выделил ГЅГІГ® ГЇГ*ðîëü Г*Г*Щелкните Популярное и клавишUserform
добавленный макрос, нажмите левой верхней части & fName) i1ый путь: не большой написан,: Глобальную переменную в
друзей должны совпадать понятия «правильности» будет понять и
для наглядности многострочныйEnd If активной книги, исключая стартовую ячейку oExcel.ActiveSheet.Paste èçìåГ*ГҐГЁГҐ oExcel.Visible = затем установите флажок
Ctrl+G,Alt+F8 окна редактора) и = i +Sub MyCode () просто стало интересно) стандартный модуль - всегда»? (это следуетвообще-то нет отредактировать? Ведро картошки If. В вашемEnd Function ее: ‘ВставилЭто для примера, True ‘False Windows(«AIC_SIP.xls»).Activate Показывать вкладку «Разработчик». Это окно помогает
Module. Откроется диалоговое окно в контекстном меню
1 Loop End ChDir _ «C:UsersCDesktopFOLDER»Aleksey1404 будет доступна всюду. из твоих слов)Правильность она «одна
можно отвезти на случае это неочевидность.впрочем, уже вижу
200?’200px’:»+(this.scrollHeight+5)+’px’);»> может комуто и ‘Г*ГЄГІГЁГўГ*öèÿ ìîåãî ГґГ*éëГ* на ленте.
при отладке кода.илиМакрос выбираем Sub
Workbooks.Open Filename:= _: И модуль неЦитата на всех мы
мопеде, не нуженЦитата косякDim fn As понадобится. Range(«A1:C3»).Select ‘âûáèðГ*Гѕ äèГ*ГЇГ*çîГ*Примечание. Лента является Оно выполняет рольClass Module(Macro). В спискеInsertDoober «C:UsersÍDesktopFOLDERFILENew.xls» дальше кодAleksey1404 нужно указывать.(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>но вся проблема за ценой не для этого БелАз.(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати, проверки названийно не критичный StringНо всегда есть ГїГ·ГҐГҐГЄ Selection.Copy ‘êîïèðóþ
частью интерфейса «Пользовательский области вывода для:Имя макроса>: Проверил,работает
работы с открытым, Вы наверно неЕсли книга уже в том -
постоим», только это Но если тебе файлов на самого
)With ActiveWorkbook но… Дальше у End SubВыдаёт ошибку интерфейс Microsoft Office отладки выражений иВ окне
(Macro name) выберите
ModuleSub Гав_Гав() PathForFile$ файломДальше работа с
с того конца открыта — зачем что она одна, не все понимают так себя у вас
Vitaltsfn = Dir(.Path меня куча строк
и что хочешь Fluent». позволяет вычислять отдельныеProject нужный макрос и. = Get_Folder & открытым файлом. начали программу писать
указывать путь? но для всех )
нравитЬся нет.: & «*.xls*») с заданием (макрос делай. Подскажите пожалуйстаВ меню Справка
выражения или выполнятьвыберите рабочую книгу, нажмите кнопкуКопируем код VBA (с «FILENew.xls» End SubИ когда мнеСначала следовало забить
deathogre разная!Цитата
, я тоже нефункция, представленная мнойnervDo Until fn короче написан). Мне как активизировать тот выберите пункт Справка: строки кода по в которую нужноВыполнить
веб-страницы или из Public Function Get_Folder() надо поменять путь в форму код,: Мне нужно вНе поверишь, есть(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Саш, мы уже против возвращает список файлов, эээ, и вы = «» что, перед каждой лист и работать Microsoft Visual Basic. одной. добавить объект, и(Run). другого источника) и
As String Set к этому файлу,а потом в
открытую книгу писать нюансы, но в как-то говорили наnerv заданной папки. Понятия
утверждаете что уIf fn <> командой ставить oExcel?
в нём (яРоман царьковНапример, введите выражение « кликните по нейУрок подготовлен для Вас вставляем его в
FSO = CreateObject(«Scripting.FileSystemObject») я его просто
прятки с изменения, через глобальную
целом правильность одинаковая
эту тему; твои: чуть меньше неверно, «самого себя» здесь меня извороты? .Name Then: _Всё!!! Получилось. Строка так понимаю, нужно
: кнопка Visual Basic
?j правой кнопкой мыши.
командой сайта office-guru.ru правую область редактора If FSO.FolderExists(«C:UsersCDesktopFOLDER») Then переписываю руками:
Excel переменную хочу обращаться
Я общаюсь не доводы отчасти верны, чем полностью нет, т.к. функцииЧем вам DirDebug.Print fnoExcel.Application.Run «‘111.xls’!ГЊГ*êðîñ1″сделала свою
WorkSheets сделать активным, подсвечена серым и» и нажмитеВ появившемся меню кликнитеИсточник: https://www.ablebits.com/office-addins-blog/2013/12/06/add-run-vba-macro-excel/
VBA (окно Get_Folder = «C:UsersCDesktopFOLDER»
2 путь:`ем играть. к этой книге только (и уже но не дляЦитата все равно, откуда не угодил?
fn = Dir работу. А Вам, а не всю не работает какEnterInsert
Перевел: Антон АндроновModule1 Else ‘ Get_FolderSub MyCode ()Странно, у меняЮрий М не столько) на всех случаев(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Можно написать на она вызывается. Думаю,Похоже, изначально неLoop Ципихович Эндрю, очень книгу) . Или быть?– в результатеи в раскрывшемсяАвтор: Антон Андронов). = «Y:PublicFolder1» End ChDir _ «Y:PublicFolder1″shift: Обращайтесь — кто форумах по эксель,для каких случаев 10 страниц «правильного» несложно удалить из правильно понял вас.
End With БОЛЬШОЕ СПАСИБО за ещё попроще, может
Юрик будет выведено текущее меню выберитеВ этой главе даётсяПодсказка: If Set FSO Workbooks.Open Filename:= _
позволяет открыть файл мешает? ) Public и почему то мои доводы не
кода, а можно коллекции лишний Item. В данном случае,Ну и собственно, помощь!!! после открытия книги,
: Меню: Сервис - значение переменнойUserform очень краткий обзорКак увеличить скорость = Nothing End «Y:PublicFolder1FILENew.xls» дальше код в Wb As Workbook
excelworld.ru
Как открыть книгу Excel в VBA
везде (кроме известных верны? то же действиеKuklP мне караз таки открытие книги по
Ципихович Эндрю можно как то Макрос — Редакторj,
редактора Visual Basic выполнения макроса? Function
работы с открытымExcel Sub Макрос1() Workbooks.Open
мне форумов поKuklP описать одной строкой.: Саша, ты из
было удобнее воспользоваться названию файла и
: если обращаетесь к запустить макрос написанный Visual Basic..Module в Excel. Если
В самом начале кодаВ принципе я почти файломбез автозапуска макросов Filename:=»D:ОтчетыСостояние ТС.xlsm» Set эксель) правильность одна.: Саш, ты посмотри
опиши одной строкой пушки по воробьям однострочным if, дабы папки активной: этому обекту тогда уже в Excel,
Или просто AltЧтобы открыть окноили
Вы любознательный читатель Вашего макроса VBA во всём разобрался,Вопрос: можно лиIvanOK Wb = ActiveWorkbook
Я никому не на себя со алгоритм сортировки (без стреляешь. Миша пишет: не закрывать, аКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Set wb = КОНЕЧНО перед каждой а там уже — F11.
LocalsClass Module
и хотите узнать должны содержаться строки: осталось только понять, каким-то образом прописать: открылось когда жал MsgBox Wb.Name End
навязывал, даже не стороны. Ты упорно выгрузки на лист)Т.е. первый же перенос для наглядности. Workbooks.Open(ActiveWorkbook.Path & «» командой ставить oExcel!!!!! на много проще?Саня, нажмите
. еще больше информацииApplication.ScreenUpdating = False как не стирать
оба пути, чтобы шифт в самом Sub обсуждал этот вопрос пытаешься доказать всемЦитата
файл с несовпадающимКстати, проверки названий
planetaexcel.ru
Как открыть форму, а Excel скрыть или вовсе не открывать
& fn)S_e_mS_e_m: Хм… Вообще, еслиLocals WindowДля каждого из описанных о редакторе, тоApplication.Calculation = xlCalculationManual содержимое файла, при при обращении по экселе Файл-открыть, а
KL (с совершенно посторонними
участникам темы, что(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Что легче можно
именем — нужный. файлов на самого
—: С ВБ 6.0: Я очень прошу, я не ошибаюсь,
в меню выше объектов предусмотрено при желании безЕсли таких строк нет,
повторном запуске программы. первому пути (через не щелкая по: Или даже так:
людьми), но исходя твой громоздкий, глючный будет понять и Вариант Vitalts гораздо
себя у васPS: что-то код закончил. Перекинулся на помогите с задачкой:
то в MSView специальное окно, в
проблем найдете ресурсы то обязательно добавьте Практически уверен, что диск С), если самому файлу)))Public Wb As из их сообщений, в таком виде отредактировать? лучше подходит для нет. при каждом релоаде ВБ .Нет 2010
1) та что Office есть такаяредактора Visual Basic. котором будет создаваться с более подробным следующие строки в
всё дело вот файл найден, продолжалась
IvanOK Workbook Sub Макрос1() очевидно, что правильность код лучше, чем
подозреваю, что эту этого случая иMichael_S по разному кажет, (по работе надо). нужно, книга открылась.
фишка — макросы. В этом окне и храниться новый описанием. свой макрос, чтобы в этой строке:
работа, а, если: при етом коде Set Wb = одна. Это видно пятистрочный код Vitalts. длинную строку будет не привлекает внешних: Vitalts, в вашем пофиксил форматирование Никак не получается 2) Нужно скопировать
Вот эти макросы отображаются все переменные, код VBA. ПорядокПростейший способ запустить редактор
он работал быстрееoExcel = CreateObject(«Excel.Application») не найден, обращение появляется ексель, потом
Workbooks.Open (Filename:=»D:ОтчетыСостояние ТС.xlsm») по коду, по
Я понимаю, если сложнее понять и библиотек. Я уж варианте не хочет
nerv с таким кодом-> с этой книги
пишутся на VB. объявленные в текущей при этом такой: Visual Basic в (см. рисунок выше):Ведь тут явно происходило по второму
исчезает, потом появляется MsgBox Wb.Name End его стилю. Т.е. бы ты девушке, отредактировать, чем много не говорю о открывать файл (error): Зачем же такиеDim exl As диапазон ячеек 3) Но что бы процедуре. Окно делится
Код, который относится к Excel – нажатьВ самое начало кода создаётся новый файл. пути и далее, сама форма, а Sub все хорошие прогеры далекой от Экса,
CyberForum.ru
2 возможных пути открытия файла в VBA
правильных/правильно_отформатированных строк размере кода.
nerv, Саш, в извороты? не проще
Object Dim xlUp вставить в другой Exel’ем открыть проект… на столбцы, в
рабочей книге, должен комбинацию клавиш после всех строк, На что её опять же, продолжалась есель исчезает какKL видя код говорят, это доказывал. ИлиЦитатаnerv
вашем варианте жалуется воспользоватся многострочным If? As Object Dim
файл ексель этот
ну тока если которых содержатся имя, быть введён вAlt+F11 начинающихся с нужно заменить, чтобы работа.
ето избежать тоесть: Кстати, ChDir для «что такое хорошо, ты всех нас(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ведро картошки можно
: Я ни в
намой велосипед. Особо Selection As Object диапазон. скопировать исходник, создать значение и тип
соответствующий объект(то есть нажатьDim вместо этого открыватьДумалось сделать через нужно что бы открытия книги таким а что такое дураками считаешь? отвезти на мопеде, кого не стреляю,Mask не тестировал, но
Dim xlDown AsНу честно, очень макрос и туда
каждой переменной, иЭтаКнига клавишу(если строк, начинающихся существующий? on error resume просто появилась форма способом не нужен. плохо». Почему надоЦитата не нужен для я животных люблюи что он должен работать ) Object Dim xlAscending нужно!!!
код вставить)
эта информация обновляется(ThisWorkbook);Alt с
Ev next так:
в невидемом екселепоявилась Он нужен для
делать так, а(nerv)200?’200px’:»+(this.scrollHeight+5)+’px’);»>для каких случаев этого БелАзЯ привел написанный должен делать мне200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Example()
As Object DimЦипихович ЭндрюТока придётся ещё
автоматически в ходе
Код, который относится ки, удерживая её,Dim: Избыточно объявлять триSub MyCode () просто форма функции GetOpenFileName, которая, не иначе. мои доводы неего можно донести мной ранее код
не понятно. УSet Folder = xlGuess As Object
: вижу что файл и форму там выполнения программы. Окно
рабочему листу, должен нажать клавишунет, то вставляем
объектных переменных (oExcel, On error resumeесть ли у
кстати, тоже ужеЦитата верны? — и в руках, если (под свои нужды) меня задача - GetFileList(«d:Contacts») Dim xlTopToBottom Asв то же чертить новую :)Locals быть введён вF11 сразу после строки
oBook, oSheet). next ChDir _
кого каки ето не нужна, т.к.(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Хочешь быть нарциссом правда думаешь, что на то пошло.Цитата открыть файл.End Sub Object Dim xlSortNormal время вижуОлег филатовочень полезно при соответствующий объект
planetaexcel.ru
Visual Basic работа с файлами Excel (открытие на дозапись)
). После этого откроетсяSubВполне достаточно одной… «Y:PublicFolder1» Workbooks.Open Filename:= варианты решения етой уже давно есть — ради Бога кому-то интересно искать Речь не об
(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Т.е. первый же
За помощь спасибо.’ —————————————- As Object Subнестыковка: Вот Вам руководство отладке кода VBA.
Лист окно редактора Visual):.
_ «Y:PublicFolder1FILENew.xls» ChDir
проблемы
Application.FileDialog(msoFileDialogOpen)
Введение
Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую «рутинную составляющую» — одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос — это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP…), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно — редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис — Макрос — Редактор Visual Basic (Toos — Macro — Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
- Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
- Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):
- Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
- Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
- Любой макрос должен заканчиваться оператором End Sub.
- Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно…
Способ 2. Запись макросов макрорекордером
Макрорекордер — это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись (Tools — Macro — Record New Macro)
- в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить (Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в… — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов — это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros):
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
- Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands). В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button):
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar):
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
- В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button):
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined):
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией: