Как сделать программу в excel
Перейти к содержимому

Как сделать программу в excel

Создание с нуля приложения на основе холста из данных Excel

Создайте с нуля собственное приложение на основе холста, используя данные Excel в табличном формате, и при необходимости добавьте в него данные из других источников. Следуя указаниям в этом руководстве, вы создадите приложение с двумя экранами. На одном экране пользователи смогут просматривать набор записей. На другом экране пользователи могут создать запись, обновить одно или несколько полей в записи или удалить всю запись. Этот подход требует больше времени по сравнению с созданием базового приложения из Excel, но позволяет опытным пользователям создавать приложения в соответствии со своими потребностями.

Предварительные условия

Чтобы точно выполнить действия из этого руководства, создайте файл Excel на основе следующего примера данных.

Скопируйте эти данные и вставьте их в файл Excel.

Отформатируйте данные в виде таблицы под названием Schedule, чтобы приложение Power Apps могло проанализировать их.

Дополнительные сведения см. в разделе Форматирование таблицы в Excel.

Сохраните файл под именем eventsignup.xls, затем закройте его и отправьте в учетную запись облачного хранилища, например OneDrive.

Вы можете использовать собственный файл Excel и ознакомиться только с общими понятиями в этом учебнике. Тем не менее данные в файле Excel должны быть отформатированы в виде таблицы. Дополнительные сведения см. в разделе Форматирование таблицы в Excel.

Открытие пустого приложения

Создайте пустое приложение на основе холста с макетом Телефон.

Подключиться к данным

В центре экрана выберите подключение к данным.

На панели Данные выберите подключение к нужному облачному хранилищу, если оно отображается. В противном случае выполните следующие действия для добавления подключения:

  1. Щелкните Новое подключение, а затем — плитку облачной учетной записи и выберите Создать.
  2. Если появится запрос, предоставьте учетные данные для этой учетной записи.

В разделе выбора файла Excel вставьте строку eventsignup или введите ее первые буквы, чтобы отфильтровать список, а затем выберите загруженный файл.

В разделе выбора таблицы установите флажок Расписание и щелкните Подключиться.

Закройте область Данные, нажав значок закрытия (X) в правом верхнем углу.

Создание экрана просмотра

На вкладке Главная щелкните стрелку вниз рядом с элементом Новый экран, чтобы открыть список типов экрана, и выберите Список.

Экран добавляется с несколькими элементами управления по умолчанию, в том числе с полем поиска и элементом управления Gallery (Коллекция). Коллекция занимает размер всего экрана под полем поиска.

В верхней части нового экрана выберите элемент управления Label (Метка), а затем замените текст [Title] строкой View records (Просмотр записей).

Изменить строку заголовка для просмотра записей.

На панели навигации слева выберите BrowseGallery1.

Вокруг коллекции появится рамка выделения с маркерами захвата.

Добавление экрана списка.

На вкладке Свойства на панели справа щелкните стрелку вниз в меню Макет.

Открытие меню макета.

Выберите Заголовок, подзаголовок и текст.

В строке формулы замените CustomGallerySample на Schedule, а также замените оба экземпляра SampleText на Volunteer.

Справа от строки формулы щелкните стрелку вниз, а затем выберите Форматирование текста.

Формула соответствует следующему примеру:

На вкладке Свойства на панели справа выберите Изменить рядом с меткой Поля.

В поле Title2 выберите Volunteer, в поле Subtitle2 выберите StartDay, а в поле Body1 выберите StartTime.

Закройте область Данные, нажав значок закрытия (X) в правом верхнем углу.

Пользователи могут сортировать и фильтровать коллекции по имени волонтера, используя функции формулы SortByColumns и Search.

  • Когда пользователь вводит в поле поиска хотя бы одну букву, в коллекции отображаются только те записи, для которых поле Volunteer содержится эта буква.
  • Когда пользователь нажимает кнопку сортировки (между кнопкой "Обновить" и кнопкой со знаком "плюс" в строке заголовка), записи в коллекции отображаются в возрастающем или убывающем порядке (в зависимости от того, сколько раз пользователь нажал на кнопку) на основе значения поля Volunteer.

Дополнительные сведения об этих и других функциях приведены в справочнике формул.

Создание экрана изменений

На вкладке Главная щелкните стрелку вниз рядом с элементом Новый экран и выберите Форма.

На левой панели навигации выберите EditForm1.

На вкладке Свойства на панели справа щелкните стрелку вниз рядом с элементом Источник данных и в появившемся списке выберите Расписание.

В указанном источнике данных выберите Изменить поля.

В области Поля выберите Добавить поле, установите флажок для каждого поля и выберите Добавить.

Щелкните стрелку рядом с именем каждого поля, чтобы свернуть его, а затем перетащите поле Volunteer вверх, чтобы оно появилось в верхней части списка полей.

Изменение порядка полей.

Закройте область Поля, нажав значок закрытия (X) в правом верхнем углу.

Установите это выражение в качестве значения свойства Item, скопировав и вставив его в строку формул или набрав с помощью клавиатуры:

В верхней части экрана выберите элемент управления Метка, а затем замените текст [Title] строкой Изменение записей.

Изменение строки заголовка.

Добавление и переименование экранов

На панели навигации слева нажмите на кнопку с многоточием (. ) для экрана Screen1 и выберите действие Удалить.

Удаление экрана.

Нажмите на кнопку с многоточием (. ) для экрана Screen2, выберите действие Переименовать и введите для него имя ViewScreen.

Нажмите на кнопку с многоточием (. ) для экрана Screen3, выберите действие Переименовать и введите для него имя ChangeScreen.

Настройка значков на экране просмотра

В верхней части экрана ViewScreen щелкните значок с кольцевой стрелкой.

Для свойства OnSelect этой кнопки введите следующую формулу:

Когда пользователь щелкнет этот значок, данные из таблицы Schedule будут заново извлечены из файла Excel.

Дополнительные сведения об этих и других функциях приведены в справочнике по формулам.

В правом верхнем углу экрана ViewScreen щелкните значок "плюс".

Добавить запись.

Для свойства OnSelect этой кнопки введите следующую формулу:

Когда пользователь щелкнет этот значок, откроется экран ChangeScreen с пустыми полями для быстрого создания записи.

Щелкните стрелку вправо рядом с первой записью в коллекции.

Выбор стрелки.

Задайте для свойства OnSelect этой стрелки следующую формулу:

EditForm(EditForm1); Navigate(ChangeScreen, ScreenTransition.None)

Когда пользователь щелкнет этот значок, отобразится экран ChangeScreen с информацией из выбранной записи в каждом поле, что позволит легко изменить или удалить эту запись.

Настройка значков на экране редактирования

На экране ChangeScreen щелкните значок "X" в левом верхнем углу.

Для свойства OnSelect этой кнопки введите следующую формулу:

Когда пользователь щелкнет этот значок, отменятся все внесенные на этом экране изменения и отобразится экран просмотра.

В правом верхнем углу выберите значок галочки.

Задайте для свойства OnSelect этой галочки следующую формулу:

SubmitForm(EditForm1); Navigate(ViewScreen, ScreenTransition.None)

Когда пользователь щелкнет этот значок, сохранятся все внесенные на этом экране изменения и отобразится экран просмотра.

На вкладке Вставка выберите Значки, а затем — значок мусорной корзины.

Задайте для свойства Color этого значка значение White и переместите его так, чтобы он располагался рядом со значком галочки.

Для свойства Visible значка мусорной корзины введите следующую формулу:

Этот значок будет отображаться, только если форма находится в состоянии Изменить, а не в состоянии Создать.

Для свойства OnSelect значка мусорной корзины введите следующую формулу:

Remove(Schedule, BrowseGallery1.Selected); Navigate(ViewScreen, ScreenTransition.None)

Когда пользователь щелкнет этот значок, выбранная запись будет удалена из источника данных и откроется экран просмотра.

Тестирование приложения

Выберите экран ViewScreen, откройте режим предварительного просмотра, нажав клавишу F5 или щелкнув значок Предварительный просмотр в правом верхнем углу.

Открытие режима предварительного просмотра.

Введите или вставьте одну или несколько букв в поле поиска, чтобы отфильтровать список по имени добровольца.

Выберите значок сортировки один или более раз, чтобы отсортировать данные по имени добровольца по возрастанию или по убыванию.

Измените значения полей в новой записи и сохраните эти изменения.

Измените значения полей в этой же записи и отмените эти изменения.

Удалите запись, которую вы добавили ранее.

Закройте режим предварительного просмотра, нажав клавишу Esc или выбрав значок закрытия в правом верхнем углу.

Дальнейшие шаги

  • Нажмите клавиши CTRL+S, чтобы сохранить приложение в облаке. После этого его можно будет запускать с других устройств. , чтобы другие пользователи могли с ним работать.
  • См. дополнительные сведения о таких функциях, как Patch, которые позволяют управлять данными без необходимости создавать стандартную форму. , чтобы можно было, например, развернуть его в другой среде или опубликовать его в AppSource.

Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).

Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).

Автоматизация рутины в Microsoft Excel при помощи VBA

В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.

VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.

Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.

Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.

Поэтому, увы, будем учить Visual Basic.

Чуть-чуть подготовки и постановка задачи

Итак, поехали. Открываем Excel.

Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.

Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):

То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).

Результат, которого хотим добиться, выглядит примерно так:

Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?

Кодим

Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».

И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».

Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:

Напишем Hello World:

Sub FormatPrice()
MsgBox «Hello World!»
End Sub

И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.

Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.

Примеры синтаксиса

‘ Процедура. Ничего не возвращает
‘ Перегрузка в VBA отсутствует
Sub foo(a As String , b As String )
‘ Exit Sub ‘ Это значит «выйти из процедуры»
MsgBox a + «;» + b
End Sub

‘ Функция. Вовращает Integer
Function LengthSqr(x As Integer , y As Integer ) As Integer
‘ Exit Function
LengthSqr = x * x + y * y
End Function

Sub FormatPrice()
Dim s1 As String , s2 As String
s1 = «str1»
s2 = «str2»
If s1 <> s2 Then
foo «123» , «456» ‘ Скобки при вызове процедур запрещены
End If

Dim res As sTRING ‘ Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
‘ Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ‘ Конвертация чего угодно в String
If i = 5 Then Exit For
Next i

Dim x As Double
x = Val( «1.234» ) ‘ Парсинг чисел
x = x + 10
MsgBox x

On Error Resume Next ‘ Обработка ошибок — игнорировать все ошибки
x = 5 / 0
MsgBox x

On Error GoTo Err ‘ При ошибке перейти к метке Err
x = 5 / 0
MsgBox «OK!»
GoTo ne

ne:
On Error GoTo 0 ‘ Отключаем обработку ошибок

‘ Циклы бывает, какие захотите
Do While True
Exit Do

Loop ‘While True
Do ‘Until False
Exit Do
Loop Until False
‘ А вот при вызове функций, от которых хотим получить значение, скобки нужны.
‘ Val также умеет возвращать Integer
Select Case LengthSqr(Len( «abc» ), Val( «4» ))
Case 24
MsgBox «0»
Case 25
MsgBox «1»
Case 26
MsgBox «2»
End Select

‘ Двухмерный массив.
‘ Можно также менять размеры командой ReDim (Preserve) — см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8

Dim coll As New Collection
Dim coll2 As Collection
coll.Add «item» , «key»
Set coll2 = coll ‘ Все присваивания объектов должны производится командой Set
MsgBox coll2( «key» )
Set coll2 = New Collection
MsgBox coll2.Count
End Sub

Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.

Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.

Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.

Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.

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

Кодим много и под Excel

В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.

Sub FormatPrice()
Sheets( «result» ).Cells.Clear
Sheets( «data» ).Activate
End Sub

Работа с диапазонами ячеек

Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

Примеры работы с Range

Sheets( «result» ).Activate
Dim r As Range
Set r = Range( «A1» )
r.Value = «123»
Set r = Range( «A3,A5» )
r.Font.Color = vbRed
r.Value = «456»
Set r = Range( «A6:A7» )
r.Value = «=A1+A3»

Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.

    Для упрощения работы рекомендую определить следующие функции-сокращения:

    Function GetCol(Col As Integer ) As String
    GetCol = Chr(Asc( «A» ) + Col)
    End Function

    Function GetCellS(Sheet As String , Col As Integer , Row As Integer ) As Range
    Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
    End Function

    Function GetCell(Col As Integer , Row As Integer ) As Range
    Set GetCell = Range(GetCol(Col) + CStr(Row))
    End Function

    Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

    Глобальные переменные

    Option Explicit ‘ про эту строчку я уже рассказывал
    Dim CurRow As Integer
    Const GroupsCount As Integer = 2
    Const DataCount As Integer = 3

    FormatPrice

    Sub FormatPrice()
    Dim I As Integer ‘ строка в data
    CurRow = 1
    Dim Groups(1 To GroupsCount) As String
    Dim PrGroups(1 To GroupsCount) As String

    Sheets( «data» ).Activate
    I = 2
    Do While True
    If GetCell(0, I).Value = «» Then Exit Do
    ‘ .
    I = I + 1
    Loop
    End Sub

    Теперь надо заполнить массив Groups:

    На месте многоточия

    Dim I2 As Integer
    For I2 = 1 To GroupsCount
    Groups(I2) = GetCell(I2, I)
    Next I2
    ‘ .
    For I2 = 1 To GroupsCount ‘ VB не умеет копировать массивы
    PrGroups(I2) = Groups(I2)
    Next I2
    I = I + 1

    И создать заголовки:

    На месте многоточия в предыдущем куске

    For I2 = 1 To GroupsCount
    If Groups(I2) <> PrGroups(I2) Then
    Dim I3 As Integer
    For I3 = I2 To GroupsCount
    AddHeader I3, Groups(I3)
    Next I3
    Exit For
    End If
    Next I2

    Не забудем про процедуру AddHeader:

    Перед FormatPrice

    Sub AddHeader(Ty As Integer , Name As String )
    GetCellS( «result» , 1, CurRow).Value = Name
    CurRow = CurRow + 1
    End Sub

    Теперь надо перенести всякую информацию в result

    For I2 = 0 To DataCount — 1
    GetCellS( «result» , I2, CurRow).Value = GetCell(I2, I)
    Next I2

    Подогнать столбцы по ширине и выбрать лист result для показа результата

    После цикла в конце FormatPrice

    Sheets( «Result» ).Activate
    Columns.AutoFit

    Всё. Можно любоваться первой версией.

    Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

    Sub AddHeader(Ty As Integer , Name As String )
    Sheets( «result» ).Range( «A» + CStr(CurRow) + «:C» + CStr(CurRow)).Merge
    ‘ Чтобы не заводить переменную и не писать каждый раз длинный вызов
    ‘ можно воспользоваться блоком With
    With GetCellS( «result» , 0, CurRow)
    .Value = Name
    .Font.Italic = True
    .Font.Name = «Cambria»
    Select Case Ty
    Case 1 ‘ Тип
    .Font.Bold = True
    .Font.Size = 16
    Case 2 ‘ Производитель
    .Font.Size = 12
    End Select
    .HorizontalAlignment = xlCenter
    End With
    CurRow = CurRow + 1
    End Sub

    Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

    Поэтому чуть-чуть меняем код с добавлением стиля границ:

    Sub AddHeader(Ty As Integer , Name As String )
    With Sheets( «result» ).Range( «A» + CStr(CurRow) + «:C» + CStr(CurRow))
    .Merge
    .Value = Name
    .Font.Italic = True
    .Font.Name = «Cambria»
    .HorizontalAlignment = xlCenter

    Select Case Ty
    Case 1 ‘ Тип
    .Font.Bold = True
    .Font.Size = 16
    .Borders(xlTop).Weight = xlThick
    Case 2 ‘ Производитель
    .Font.Size = 12
    .Borders(xlTop).Weight = xlMedium
    End Select
    .Borders(xlBottom).Weight = xlMedium ‘ По убыванию: xlThick, xlMedium, xlThin, xlHairline
    End With
    CurRow = CurRow + 1
    End Sub

    Осталось лишь добится пропусков перед началом новой группы. Это легко:

    В начале FormatPrice

    Dim I As Integer ‘ строка в data
    CurRow = 0 ‘ чтобы не было пропуска в самом начале
    Dim Groups(1 To GroupsCount) As String

    В цикле расстановки заголовков

    If Groups(I2) <> PrGroups(I2) Then
    CurRow = CurRow + 1
    Dim I3 As Integer

    В точности то, что и хотели.

    Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

    Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

    Спасибо за внимание.

    Буду рад конструктивной критике в комментариях.

    UPD: Перезалил пример на Dropbox и min.us.

    UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

    Как написать макрос в Excel на языке программирования VBA

    Макрос записывается двумя способами: автоматически и вручную. Воспользовавшись первым вариантом, вы просто записываете определенные действия в Microsoft Excel, которые выполняете в данный момент времени. Потом можно будет воспроизвести эту запись. Такой метод очень легкий и не требует знания кода, но применение его на практике довольно ограничено. Ручная запись, наоборот, требует знаний программирования, так как код набирается вручную с клавиатуры. Однако грамотно написанный таким образом код может значительно ускорить выполнение процессов.

    Создание макросов

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

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

    Создать макрос в Excel с помощью макрорекордера

    Для начала проясним, что собой представляет макрорекордер и при чём тут макрос.

    Макрорекордер – это вшитая в Excel небольшая программка, которая интерпретирует любое действие пользователя в кодах языка программирования VBA и записывает в программный модуль команды, которые получились в процессе работы. То есть, если мы при включенном макрорекордере, создадим нужный нам ежедневный отчёт, то макрорекордер всё запишет в своих командах пошагово и как итог создаст макрос, который будет создавать ежедневный отчёт автоматически.

    Этот способ очень полезен тем, кто не владеет навыками и знаниями работы в языковой среде VBA. Но такая легкость в исполнении и записи макроса имеет свои минусы, как и плюсы:

    • Записать макрорекордер может только то, что может пощупать, а значит записывать действия он может только в том случае, когда используются кнопки, иконки, команды меню и всё в этом духе, такие варианты как сортировка по цвету для него недоступна;
    • В случае, когда в период записи была допущена ошибка, она также запишется. Но можно кнопкой отмены последнего действия, стереть последнюю команду которую вы неправильно записали на VBA;
    • Запись в макрорекордере проводится только в границах окна MS Excel и в случае, когда вы закроете программу или включите другую, запись будет остановлена и перестанет выполняться.

    Для включения макрорекордера на запись необходимо произвести следующие действия:

    • в версии Excel от 2007 и к более новым вам нужно на вкладке «Разработчик» нажать кнопочку «Запись макроса»
    • в версиях Excel от 2003 и к более старым (они еще очень часто используются) вам нужно в меню «Сервис» выбрать пункт «Макрос» и нажать кнопку «Начать запись».

    Следующим шагом в работе с макрорекордером станет настройка его параметров для дальнейшей записи макроса, это можно произвести в окне «Запись макроса», где:

    • поле «Имя макроса» — можете прописать понятное вам имя на любом языке, но должно начинаться с буквы и не содержать в себе знаком препинания и пробелы;
    • поле «Сочетание клавиш» — будет вами использоваться, в дальнейшем, для быстрого старта вашего макроса. В случае, когда вам нужно будет прописать новое сочетание горячих клавиш , то эта возможность будет доступна в меню «Сервис» — «Макрос» — «Макросы» — «Выполнить» или же на вкладке «Разработчик» нажав кнопочку «Макросы» Sub MyMakros()
      Dim polzovatel As String
      Dim data_segodnya As Date
      polzovatel = Application.UserName
      data_segodnya = Now
      MsgBox «Макрос запустил пользователь: » & polzovatel & vbNewLine & data_segodnya
      End Sub

    Примечание. Если в главном меню отсутствует закладка «РАЗРАБОТЧИК», тогда ее необходимо активировать в настройках: «ФАЙЛ»-«Параметры»-«Настроить ленту». В правом списке «Основные вкладки:» активируйте галочкой опцию «Разработчик» и нажмите на кнопку ОК.

    Настройка разрешения для использования макросов в Excel

    В Excel предусмотрена встроенная защита от вирусов, которые могут проникнуть в компьютер через макросы. Если хотите запустить в книге Excel макрос, убедитесь, что параметры безопасности настроены правильно.

    Вариант 1: Автоматическая запись макросов

    Прежде чем начать автоматическую запись макросов, нужно включить их в программе Microsoft Excel. Для этого воспользуйтесь нашим отдельным материалом.

    Подробнее: Включение и отключение макросов в Microsoft Excel

    Когда все готово, приступаем к записи.

      Перейдите на вкладку «Разработчик». Кликните по кнопке «Запись макроса», которая расположена на ленте в блоке инструментов «Код».

    Запуск макроса

    Для проверки того, как работает записанный макрос, выполним несколько простых действий.

      Кликаем в том же блоке инструментов «Код» по кнопке «Макросы» или жмем сочетание клавиш Alt + F8.

    Редактирование макроса

    Естественно, при желании вы можете корректировать созданный макрос, чтобы всегда поддерживать его в актуальном состоянии и исправлять некоторые неточности, допущенные во время процесса записи.

      Снова щелкаем на кнопку «Макросы». В открывшемся окне выбираем нужный и кликаем по кнопке «Изменить».

    Создание кнопки для запуска макросов в панели инструментов

    Как я говорил ранее вы можете вызывать процедуру макроса горячей комбинацией клавиш, но это очень утомительно помнить какую комбинацию кому назначена, поэтому лучше всего будет создание кнопки для запуска макроса. Кнопки создать, возможно, нескольких типов, а именно:

    1. Кнопка в панели инструментов в MS Excel 2003 и более старше. Вам нужно в меню «Сервис» в пункте «Настройки» перейти на доступную вкладку «Команды» и в окне «Категории» выбрать команду «Настраиваемая кнопка» обозначена жёлтым колобком или смайликом, кому как понятней или удобней. Вытащите эту кнопку на свою панель задач и, нажав правую кнопку мыши по кнопке, вызовите ее контекстное меню, в котором вы сможете отредактировать под свои задачи кнопку, указав для нее новую иконку, имя и назначив нужный макрос.
    2. Кнопка в панели вашего быстрого доступа в MS Excel 2007 и более новее. Вам нужно клацнуть правой кнопкой мышки на панели быстрого доступа , которое находится в верхнем левом углу окна MS Excel и в открывшемся контекстном меню выбираете пункт «Настройка панели быстрого доступа». В диалоговом окне настройки вы выбираете категорию «Макросы» и с помощью кнопки «Добавить» вы переносите выбранный со списка макрос в другую половинку окна для дальнейшего закрепления этой команды на вашей панели быстрого доступа.

    Создание графической кнопки на листе Excel

    Данный способ доступен для любой из версий MS Excel и заключается он в том, что мы вынесем кнопку прямо на наш рабочий лист как графический объект. Для этого вам нужно:

    • В MS Excel 2003 и более старше переходите в меню «Вид», выбираете «Панель инструментов» и нажимаете кнопку «Формы».
    • В MS Excel 2007 и более новее вам нужно на вкладке «Разработчик» открыть выпадающее меню «Вставить» и выбрать объект «Кнопка».

    После всего этого вы должны нарисовать кнопку на вашем листе при зажатой левой кнопке мыши. После окончания процесса рисования включится автоматически окошко, где вам нужно будет выбрать тот макрос, который обязан, выполнятся при нажатии на вашей кнопке.

    Чтобы записать макрос, следует:

    1. Войти во вкладку «разработчик».
    2. Выбрать запись макроса.
    3. Выбрать имя макроса (в имени нельзя использовать пробелы и дефисы);
    4. Можно выбрать сочетание клавиш, при нажатии которых будет начинаться запись макроса;
    5. Выбрать место сохранения:

    — при сохранении в «Эта книга» макрос будет работать только в текущем документе;

    — при сохранении в «Личная книга» макрос будет работать во всех документах на Вашем компьютере.

    1. Можно добавить описание макроса, оно поможет Вам вспомнить, какие действия совершает макрос.
    2. Нажать «Ок».
    3. Если вы не указали сочетание клавиш, запись начнется сразу после нажатия кнопки «Ок».
    4. Когда идет запись, Вы должны совершать требуемую последовательность действий.
    5. Когда закончите, нажимайте кнопку остановить запись.

    Записанные макросы отображаются в книге макросов.

    Чтобы их посмотреть следует нажать кнопку «макросы». В появившемся окне появится список макросов. Выберете нужный макрос и нажмите «Выполнить».

    Макросы, находящиеся в книге можно редактировать. Для этого нужно выбрать макрос и нажать кнопку «Изменить». При нажатии на кнопку «Изменить» откроется редактор макросов с записанным на языке VBA скриптом.

    Отображение вкладки “Разработчик” в ленте меню

    Перед тем как записывать макрос, нужно добавить на ленту меню Excel вкладку “Разработчик”. Для этого выполните следующие шаги:

    1. Щелкните правой кнопкой мыши по любой из существующих вкладок на ленте и нажмите «Настроить ленту». Он откроет диалоговое окно «Параметры Excel».
    2. В диалоговом окне «Параметры Excel» у вас будут параметры «Настроить ленту». Справа на панели «Основные вкладки» установите флажок «Разработчик».
    3. Нажмите «ОК».

    В результате на ленте меню появится вкладка “Разработчик”

    Абсолютная и относительная запись макроса

    Вы уже знаете про абсолютные и относительные ссылки в Excel? Если вы используете абсолютную ссылку для записи макроса, код VBA всегда будет ссылаться на те же ячейки, которые вы использовали. Например, если вы выберете ячейку A2 и введете текст “Excel”, то каждый раз – независимо от того, где вы находитесь на листе и независимо от того, какая ячейка выбрана, ваш код будет вводить текст “Excel” в ячейку A2.

    Если вы используете параметр относительной ссылки для записи макроса, VBA не будет привязываться к конкретному адресу ячейки. В этом случае программа будет “двигаться” относительно активной ячейки. Например, предположим, что вы уже выбрали ячейку A1, и вы начинаете запись макроса в режиме относительной ссылки. Теперь вы выбираете ячейку A2, вводите текст Excel и нажмите клавишу Enter. Теперь, если вы запустите этот макрос, он не вернется в ячейку A2, вместо этого он будет перемещаться относительно активной ячейки. Например, если выбрана ячейка B3, она переместится на B4, запишет текст “Excel” и затем перейдет к ячейке K5.

    Теперь давайте запишем макрос в режиме относительных ссылок:

    1. Выберите ячейку A1.
    2. Перейдите на вкладку “Разработчик”.
    3. В группе “Код” нажмите кнопку “Относительные ссылки”. Он будет подсвечиваться, указывая, что он включен.
    4. Нажмите кнопку “Запись макроса”.
    5. В диалоговом окне “Запись макроса” введите имя для своего макроса. Например, имя “ОтносительныеСсылки”.
    6. В опции “Сохранить в” выберите “Эта книга”.
    7. Нажмите “ОК”.
    8. Выберите ячейку A2.
    9. Введите текст “Excel” (или другой как вам нравится).
    10. Нажмите клавишу Enter. Курсор переместиться в ячейку A3.
    11. Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.

    Макрос в режиме относительных ссылок будет сохранен.

    Теперь сделайте следующее.

    1. Выберите любую ячейку (кроме A1).
    2. Перейдите на вкладку “Разработчик”.
    3. В группе “Код” нажмите кнопку “Макросы”.
    4. В диалоговом окне “Макрос” кликните на сохраненный макрос “ОтносительныеСсылки”.
    5. Нажмите кнопку “Выполнить”.

    Как вы заметите, макрос записал текст “Excel” не в ячейки A2. Это произошло, потому что вы записали макрос в режиме относительной ссылки. Таким образом, курсор перемещается относительно активной ячейки. Например, если вы сделаете это, когда выбрана ячейка B3, она войдет в текст Excel – ячейка B4 и в конечном итоге выберет ячейку B5.

    Вот код, который записал макрорекодер:

    Обратите внимание, что в коде нет ссылок на ячейки B3 или B4. Макрос использует Activecell для ссылки на текущую ячейку и смещение относительно этой ячейки.

    Не обращайте внимание на часть кода Range(«A1»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.

    Расширение файлов Excel, которые содержат макросы

    Когда вы записываете макрос или вручную записываете код VBA в Excel, вам необходимо сохранить файл с расширением файла с поддержкой макросов (.xlsm).

    До Excel 2007 был достаточен один формат файла – .xls. Но с 2007 года .xlsx был представлен как стандартное расширение файла. Файлы, сохраненные как .xlsx, не могут содержать в себе макрос. Поэтому, если у вас есть файл с расширением .xlsx, и вы записываете / записываете макрос и сохраняете его, он будет предупреждать вас о сохранении его в формате с поддержкой макросов и покажет вам следующее диалоговое окно:

    Если вы выберете “Нет”, Excel сохранить файл в формате с поддержкой макросов. Но если вы нажмете “Да”, Excel автоматически удалит весь код из вашей книги и сохранит файл как книгу в формате .xlsx. Поэтому, если в вашей книге есть макрос, вам нужно сохранить его в формате .xlsm, чтобы сохранить этот макрос.

    Что нельзя сделать с помощью макрорекодера?

    Макро-рекордер отлично подходит для вас в Excel и записывает ваши точные шаги, но может вам не подойти, когда вам нужно сделать что-то большее.

    • Вы не можете выполнить код без выбора объекта. Например, если вы хотите, чтобы макрос перешел на следующий рабочий лист и выделил все заполненные ячейки в столбце A, не выходя из текущей рабочей таблицы, макрорекодер не сможет этого сделать. В таких случаях вам нужно вручную редактировать код.
    • Вы не можете создать пользовательскую функцию с помощью макрорекордера. С помощью VBA вы можете создавать пользовательские функции, которые можно использовать на рабочем листе в качестве обычных функций.
    • Вы не можете создавать циклы с помощью макрорекордера. Но можете записать одно действие, а цикл добавить вручную в редакторе кода.
    • Вы не можете анализировать условия: вы можете проверить условия в коде с помощью макрорекордера. Если вы пишете код VBA вручную, вы можете использовать операторы IF Then Else для анализа условия и запуска кода, если true (или другой код, если false).

    Редактор Visual Basic

    В Excel есть встроенный редактор Visual Basic , который хранит код макроса и взаимодействует с книгой Excel. Редактор Visual Basic выделяет ошибки в синтаксисе языка программирования и предоставляет инструменты отладки для отслеживания работы и обнаружения ошибок в коде, помогая таким образом разработчику при написании кода.

    Запускаем выполнение макроса

    Чтобы проверить работу записанного макроса, нужно сделать следующее:

    1. В той же вкладке (“Разработчик”) и группе “Код” нажимаем кнопку “Макросы” (также можно воспользоваться горячими клавишами Alt+F8).
    2. В отобразившемся окошке выбираем наш макрос и жмем по команде “Выполнить”. Примечание: Есть более простой вариант запустить выполнение макроса – воспользоваться сочетанием клавиш, которое мы задали при создании макроса.
    3. Результатом проверки будет повторение ранее выполненных (записанных) действий.

    Корректируем макрос

    Созданный макрос можно изменить. Самая распространенная причина, которая приводит к такой необходимости – сделанные при записи ошибки. Вот как можно отредактировать макрос:

    1. Нажимаем кнопку “Макросы” (или комбинацию Ctrl+F8).
    2. В появившемся окошке выбираем наш макрос и щелкаем “Изменить”.
    3. На экране отобразится окно редактора “Microsoft Visual Basic”, в котором мы можем внести правки. Структура каждого макроса следующая:
      • открывается с команды “Sub”, закрывается – “End Sub”;
      • после “Sub” отображается имя макроса;
      • далее указано описание (если оно есть) и назначенная комбинация клавиш;
      • команда “Range(“…”).Select” возвращает номер ячейки. К примеру, “Range(“B2″).Select” отбирает ячейку B2.
      • В строке “ActiveCell.FormulaR1C1” указывается значение ячейки или действие в формуле.
    4. Давайте попробуем скорректировать макрос, а именно, добавить в него ячейку B4 со значением 3. В код макроса нужно добавить следующие строки:
      Range(«B4»).Select
      ActiveCell.FormulaR1C1 = «3»
    5. Для результирующей ячейки D2, соответственно, тоже нужно изменить начальное выражение на следующее:
      ActiveCell.FormulaR1C1 = «=RC[-2]*R[1]C[-2]*R[2]C[-2]» . Примечание: Обратите внимание, что адреса ячеек в данной строке (ActiveCell.FormulaR1C1) пишутся в стиле R1C1.
    6. Когда все готово, редактор можно закрывать (просто щелкаем на крестик в правом верхнем углу окна).
    7. Запускаем выполнение измененного макроса, после чего можем заметить, что в таблице появилась новая заполненная ячейка (B4 со значением “3”), а также, пересчитан результат с учетом измененной формулы.
    8. Если мы имеем дело с большим макросом, на выполнение которого может потребоваться немало времени, ручное редактирование изменений поможет быстрее справиться с задачей.
      • Добавив в конце команду Application.ScreenUpdating = False мы можем ускорить работу, так как во время выполнения макроса, изменения на экране отображаться не будут.
      • Если потребуется снова вернуть отображение на экране, пишем команду: Application.ScreenUpdating = True .
    9. Чтобы не нагружать программу пересчетом после каждого внесенного изменения, в самом начале пишем команду Application.Calculation = xlCalculationManual , а в конце – Application.Calculation = xlCalculationAutomatic . Теперь вычисление будет выполняться только один раз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *