Как объединить макросы в Excel
Как объединить макросы в Excel
Макрос — это специальная программа, написанная на встроенном в Excel языке программирования Visual Basic for Application (VBA). Если вам часто приходится выполнять одни и те же операции в Эксель, то гораздо проще записать макрос или найти готовый код макроса, для выполнения определенных действий в Интернете.
Во втором случае, Вы найдете макрос в виде VBA-кода. В этом обычно и состоит вопрос: как добавить макрос в рабочий лист Excel, и как им пользоваться.
- 1 Как включить макросы в Excel
- 2 Как вставить макрос в Excel
- 3 Как запустить макросы в Excel
Первый макрос со смещением списка в сторону (горизонтально).
Текст макроса:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range(«B2:B10»)) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
If Len(Target.Offset(0, 1)) = 0 Then
Target.Offset(0, 1) = Target
Else
Target.End(xlToRight).Offset(0, 1) = Target
End If
Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Необходимо обратить внимание, что в строке :
If Not Intersect(Target, Range(«B1:B10»)) Is Nothing And Target.Cells.Count = 1 Then
Значения («B1:B10»)— это диапазон в пределах которого будет работать выпадающий список.
Аналогичным образом можно создать выпадающий список со смещением вниз и выпадающий список, записывающий в ячейку несколько значений через знак табуляции или пробел.
Выпадающий список из ActiveX Controls (вариант 3):
Тип элемента, у которого много настроек и много возможностей. Детально про события читайте в статье, про разницу элементов Form и ActiveX другая статья.
- На вкладке "Developer" ("Разработчик") в блоке инструментов "Controls" нажимаем кнопку "Insert".
- В появившемся окне из верхней части с шапкой "ActiveX Controls" выбираем элемент "Combo Box (ActiveX Control).
- Теперь на листе левой кнопкой мыши рисуем прямоугольник такого размера, как должен быть наш выпадающий список. Сам графический элемент после этого будет готов. Теперь укажем набор возможных значений для него.
- Убеждаемся, что переключатель "Design Mode" активирован.
- Нажимаем кнопку "Properties" на той же панели управления.
- Отметим несколько полезных свойств, которые можно изменить на своё усмотрение:
- BackColor — цвет фона элемента.
- BackStyle — режим фона:
- fmBackStyleTransparent — фон прозрачный, видно ячейки позади.
- fmBackStyleOpaque — цвет фона указанный свойством BackColor.
- BorderColor — цвет рамки вокруг элемента.
- BorderStyle — режим рамки элемента:
- fmBorderStyleNone — рамка отсутствует.
- fmBorderStyleSingle — рамка вокруг элемента в 1 пиксель.
- Font — шрифт значений и слов.
- ForeColor — цвет текста.
- LinkedCell — связная ячейка для вывода активного значения на лист.
- ListFillRange — диапазон смежных ячеек с возможными вариантами выбора в списке.
- MatchEntry — действие при ручном вводе символов:
- fmMatchEntryFirstLetter — каждый введённый символ рассматривается как первая буква возможных значений и подбираются вероятные значения автоматически.
- fmMatchEntryComplete — оценивается полное совпадение введённого текста с вариантами выбора и предлагается наиболее вероятное значение.
- fmMatchEntryNone — совпадения со всеми значениями не проводится.
- ShowDropButtonWhen — когда отображается справа кнопка выпадающего списка:
- fmShowDropButtonWhenNever — никогда не отображается.
- fmShowDropButtonWhenFocus — только когда фокус приложения расположен на элементе графического интерфейса.
- fmShowDropButtonWhenAlways — отображается всегда, по-умолчанию.
- SpecialEffect — различные эффекты (выпуклость, выдавливание. )
- Style — режим ввода произвольных значений:
- fmStyleDropDownCombo — комбинированный вариант, когда пользователь может вручную печатать в поле значение.
- fmStyleDropDownList — вручную вводить значения нельзя, можно выбрать только из списка.
- Много разных свойств можно выбрать по вкусу, когда настройки закончили закрываем окно "Properties", выключаем режим "Design Mode" и уже можем работать с выпадающим списком.
Если установить свойства "Linked Cell" вместе с "ListFillRange" получится выпадающий список аналогичный варианту 2.
Как в Excel сделать выпадающий список в ячейке с выбором нескольких значений?
Прежде всего, нужно заполнить таблицу. Выделить ее содержимое, и с помощью «Проверки данных» выполнить вышеописанные действия.
Чтобы добавить макрос, кликнуть правой кнопкой мыши по ярлыку листа с выпадающим перечнем и выбрать вариант «Исходный текст». Откроется Visual Basic, в окне редактора следует использовать код для горизонтального отображения:
В результате должно получиться следующее:
Для вертикального отображения можно воспользоваться кодом:
В результате получится так:
Для того чтобы элементы накапливались в той же самой ячейке, подойдет код:
Макрос выпадающего списка с несколькими значениями в Excel: 2 комментария
Добрый день! Макрос выпадающего списка с внесением нескольких значений в одну ячейку почему то не работает. Нижеприведенные строки почему то становятся красным. Я так понимаю В2:В5 это диапазон который можно изменять на другую область например на F2:F200 допучстим? Или я не прав? Подскажите пожалуйста.
I am relatively new to VBA and I need help with this please.
I have a private sub within a sheet and I want it to autofill formulas adjacent to a dynamic named range, if the size of the range changes.
(edit) I am pasting data from another worksheet into this one columns A-M. My dynamic range is defined as =OFFSET($A$1,1,0,COUNTA($A:$A)-1,13). The first If statement should exit the sub if there is no data in column M and I had the destination calculating the last row of column M because I want to fill the formulas in N:O so that they cover the same number of rows as column M.
This is my code and it works if the size of the range gets smaller (i.e. if I delete rows from the bottom), but not if it gets bigger and I can’t work out why!
I put the last bit into a separate macro to test if it works on its own and for some reason, when I run it, the autofill goes all the way up to row 1 and overwrites the formulas, which is weird because I use that code a lot and it’s never done that before. What have I done.
Also, if there is a better way to do the autofill I’d appreciate if someone could let me know what it is because I just cobbled that together from bits I found on forums
Возвращает объект Range , представляющий прямоугольное пересечение двух или более диапазонов. Returns a Range object that represents the rectangular intersection of two or more ranges. Если указаны один или несколько диапазонов из другого листа, возвращается ошибка. If one or more ranges from a different worksheet are specified, an error is returned.
Работа с формой календаря
Форма календаря имеет достаточно широкий функционал.
- Можно быстро перейти к текущему числу.
- Быстро переключить месяц путем выбора его из списка.
- Изменять год с помощью переключателей.
- При выборе даты отображаются дни недели и подсвечиваются выходные дни.
- Вы можете вызвать окно ввода даты и продолжать работать с данными. Закрывать окно нет необходимости.
- Закрыть календарь можно в любой момент путем нажатия на крестик в правом верхнем углу.
Excel works!
Иногда клиента не переубедишь. Думаю, это даже хорошо — ведь только клиент знает, что ему на самом деле нужно, а предоставляющий услугу должен стремиться сделать именно как просят. На этот раз мне заказали сделать, чтобы ячейки в матрице выбирались при помощи полосы прокрутки, горизонтальной и вертикальной. Основная причина — закрыть доступ к самой матрице и оставить возможность двигать только полосы прокрутки. Сделал именно так. А вам я расскажу, что такое полоса прокрутки в Excel, и как ее добавить на лист.
Сперва я напишу, как правильно и быстро добавить полосу прокрутки на лист, затем опишу, как настроить полосы,привязать их к коду VBA и защитить лист.
Полоса прокрутки в Excel. Начало
Добавить полосу прокрутки несложно: перейдите на вкладку разработчик (как включить вкладку, читайте здесь ). Найдите кнопку Вставить и выберите Элемент управления формы — Полоса прокрутки. Как показано на картинке:
Можно выбрать и элементы ActiveX (ниже), но на мой взгляд настройка Элемента управления формы для новичка удобнее. Поэтому рассказываю именно о них.
Полоса прокрутки в Excel, как элемент управления формы. Настройка
Итак, вы добавили полосу. Теперь привяжем ее к данным, сделать это несложно. Кликаете правой кнопкой мыши и выбираете формат объекта
Размер вы можете изменять, перетаскивая границы, поэтому в открывшемся окне нам наиболее интересна вкладка Элемент управления
Задаем мин и макс значения (у нас полоса на месяцы, поэтом от одного до 12), задаем шаг изменения по одному месяцу
Двигая ползунок полосы прокрутки, вы передаете число значения ползунка в определенную ячейку.
Это число передается в ячейку, которую вы указываете в поле Связь с ячейкой. В нашем случае A2.
Добавим в полосу прокрутки немного макросов
Теперь, чтобы в таблице выбиралась определенная ячейка, добавим немного кода. Откройте редактор VBA (что это такое читайте в статье ).
На странице листа запишите код
Этот макрос будет выполняться при изменении полосы прокрутки ScrollBar8 методом Change. У меня элементов было много и форма управления восьмая. Узнать номер вашей полосы прокрутки можно в окне, предварительно выделив полосу.
В Cells мы определяем значения нашей матрицы сначала по строкам, потом по столбцам. В ячейку B2 записываем статичное значение или передаем с горизонтальной полосы прокрутки. Вторую полосу создаем по аналогии.
Как защитить лист, но дать возможность работать с полосой прокрутки (элементом управления форм)
Заходите во вкладку Рецензирование и найдите кнопку Защитить лист . Жмете ОК. Но элементы управления форм тоже не работают во время защиты, — скажете вы. Верно. Я видел громоздкие коды, которые решали эту проблему. Но есть решение простое и удобное. Разрешите изменять ячейки, в которые полосы передают данные (A1 и B2), тогда и полосы будут работать при защищенном листе.
Чтобы разрешить изменение ячеек, кликните по ячейке правой кнопкой мыши — Формат ячеек — вкладка Защита — снимите галочку Защищаемая ячейка