Макрос Excel

Создание макросов и пользовательских функций на VBA

45124 14.10.2012 Скачать пример

Введение

Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в 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):

После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

VBA Excel. Форматирование текста в ячейке (объект Font)

Форматирование текста в ячейке при помощи кода VBA Excel. Объект Font и его основные свойства. Примеры изменения начертания строк в заданном диапазоне.

В этой статье рассмотрены свойства шрифта (объекта Font), определяющие внешнее оформление (начертание) видимого значения ячейки. Это касается не только текста (строк), но и визуального начертания отображаемых дат и числовых значений.

Формат отображаемого значения

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

  • рабочего листа по умолчанию;
  • установленный для диапазона пользователем;
  • примененный к диапазону из кода VBA Excel.

Если ячейка содержит текстовое значение, его начертание можно форматировать по отдельным частям (подстрокам). Такое форматирование доступно как в ручном режиме на рабочем листе, так и из кода VBA Excel.

У объекта Range есть свойство Font (шрифт), которое отвечает за форматирование (начертание) визуально отображаемого текста в ячейках рабочего листа. Его применение вызывает объект Font, который в свою очередь обладает собственным набором свойств, отвечающих за конкретный стиль начертания отображаемого значения.

Основные свойства объекта Font

Свойство Описание Значения
Name наименование шрифта “Arial”, “Calibri”, “Courier New”, “Times New Roman” и т.д.
Size размер шрифта от 1 до 409 пунктов
Bold полужирное начертание True, False
Italic курсивное начертание True, False
FontStyle заменяет Bold и Italic “обычный”, “полужирный”, “курсив”, “полужирный курсив”
Superscript надстрочный текст True, False
Subscript подстрочный текст True, False
Underline подчеркнутый текст True, False
Color* цвет текста от 0 до 16777215

*Color – это не единственное свойство, отвечающее за цвет отображаемого текста в ячейке. Оно также может принимать и другие значения, кроме указанных в таблице. Смотрите подробности в статье Цвет текста (шрифта) в ячейке.

Примеры форматирования текста

Пример 1
В этом примере ячейкам диапазона «A1:A3» присвоим шрифты разных наименований:

Пример 2
В этом примере рассмотрим применение одного свойства объекта Font к одной ячейке:

Пример 3
Форматирование диапазона из нескольких ячеек:

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

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

Макрос — это компьютерный код, написанный для Excel на языке программирования Visual Basic for Applications (VBA). Базовые понятия языка программирования VBA рассматриваются на нашем сайте в Учебнике по VBA. Однако прежде чем приступить к написанию кода VBA, рекомендуем познакомиться с уроками, в которых рассматривается безопасность макросов Excel и редактор Visual Basic.

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

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

Редактор Visual Basic

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

Запись макросов

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

Учебник Excel VBA

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

Урок подготовлен для Вас командой сайта office-guru.ru

Перевел: Антон Андронов
Правила перепечатки
Еще больше уроков по Microsoft Excel

Оцените качество статьи. Нам важно ваше мнение:

Как сделать ячейку активной в excel vba?

Как избежать использования Select в Excel VBA

448 BiGXERO

Я много слышал о понятном отвращении к использованию .Select в Excel VBA, но я не уверен, как его избежать. Я обнаружил, что мой код будет более пригодным для повторного использования, если бы я мог использовать переменные вместо функций Select . Однако я не уверен, как обращаться к вещам (например, ActiveCell и т.д.), Если не использовать Select .

vba excel-vba excel

13 ответов

455 Решение chris neilsen

Некоторые примеры того, как избежать выбора

Использовать переменные Dim

Set переменную в требуемый диапазон. Существует много способов обращения к диапазону с одной ячейкой

или многоячеечный диапазон

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

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

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

Опять же, это относится к активной книге. Если вы специально не хотите работать только с ActiveWorkbook или ThisWorkbook , лучше также Workbook переменную Workbook .

Если вы хотите работать с ActiveWorkbook , для ясности лучше всего быть явным. Но WorkBook осторожны, так как многие методы WorkBook меняют активную книгу.

Вы также можете использовать объект ThisWorkbook для ссылки на книгу, содержащую текущий код.

Общим (плохим) фрагментом кода является открытие книги, получение некоторых данных, затем закрытие

И было бы лучше:

Переходите к своим переменным Sub и Function как Range

Вы также должны применять методы (такие как Find и Copy ) к переменным

Если вы зацикливаете на диапазон ячеек, часто лучше (быстрее) скопировать значения диапазона в вариантный массив и перебрать цикл

Это небольшая дегустация для того, что возможно.

Две основные причины, по которым следует избегать .Select / .Activate / Selection / Activecell / Activesheet / Activeworkbook и т.д.

  • Он замедляет ваш код.
  • Обычно это является основной причиной ошибок времени выполнения.

Как мы можем избежать этого?

1) Непосредственно работать с соответствующими объектами

Рассмотрим этот код

Этот код также может быть записан как

2) При необходимости объявите свои переменные. Тот же самый код может быть записан как

Одна небольшая точка внимания я добавлю к всем превосходным ответам, приведенным выше:

Вероятно, самое большое, что вы можете сделать, чтобы избежать использования Select, максимально , используйте именованные диапазоны (в сочетании с значимыми именами переменных) в коде VBA. Этот момент был упомянут выше, но немного затушевывался; однако он заслуживает особого внимания.

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

Именованные диапазоны упрощают чтение и понимание кода.

Довольно очевидно, что содержат именованные диапазоны Months и MonthlySales , и что делает процедура.

Почему это важно? Частично потому, что другим людям это легче понять, но даже если вы единственный человек, который когда-либо увидит или использует ваш код, вы все равно должны использовать именованные диапазоны и хорошие имена переменных, потому что ВЫ ЗАБУДЬТЕ что вы хотели сделать с ним год спустя, и вы будете тратить 30 минут, просто выясняя, что делает ваш код.

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

Рассмотрим, если приведенный выше пример был написан следующим образом:

Этот код будет работать с самого начала — это пока вы или будущий пользователь не решите «gee wiz, я думаю, что я собираюсь добавить новый столбец с годом в столбце A !» или поставить столбец расходов между месяцами и столбцами продаж или добавить заголовок для каждого столбца. Теперь ваш код сломан. И поскольку вы использовали имена страшных переменных, вам потребуется гораздо больше времени, чтобы выяснить, как исправить это, чем нужно.

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

40 MattB

Я дам короткий ответ, потому что все остальные дали длинный.

Вы получите .select и .activate всякий раз, когда вы записываете макросы и повторно их используете. Когда вы выбираете ячейку или лист, она просто активирует ее. С этого момента, когда вы используете неквалифицированные ссылки, такие как Range.Value , они просто используют активную ячейку и лист. Это также может быть проблематичным, если вы не смотрите, где находится ваш код, или пользователь нажимает на книгу.

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

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

27 Jeeped

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

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

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

Примеры подклассов, основанных на выборе:

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

Короче говоря, не отбрасывайте Selection из-за его тесной связи с .Select и ActiveCell . В качестве свойства листа у него есть много других целей.

(Да, я знаю, что этот вопрос касался .Select , а не Selection , но я хотел устранить любые заблуждения, которые могли бы вызывать новички VBA-кодов.)

Обратите внимание, что в следующем я сравниваю подход Select (тот, который OP хочет избежать), с использованием подхода Range (и это ответ на вопрос). Поэтому не прекращайте чтение, когда вы видите первый выбор.

Это действительно зависит от того, что вы пытаетесь сделать. Во всяком случае, простой пример может быть полезен. Предположим, что вы хотите установить значение активной ячейки на «foo». Используя ActiveCell, вы должны написать что-то вроде этого:

Если вы хотите использовать его для ячейки, которая не является активной, например, для «B2», вы должны сначала выбрать ее, например:

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

Затем вы можете переписать Macro2 как:

Надеюсь, это поможет немного разобраться.

19 Vityata

Избегание Select и Activate — это шаг, который делает вас немного лучшим разработчиком VBA. В общем случае Select и Activate используются, когда макрос записывается, поэтому рабочий лист или диапазон Parent всегда считаются активными.

Вот как вы можете избежать Select и Activate в следующих случаях:

Добавление нового рабочего листа и копирование на нем ячейки:

От (код, созданный с помощью макрозаписей):

Использование диапазонов именованных диапазонов

Вы можете получить к ним доступ с помощью . Что действительно красиво, по сравнению с другим. Проверьте себя:

Пример сверху будет выглядеть так:

Не копирование значений, но их принятие

Обычно, если вы хотите Select , скорее всего, вы что-то копируете. Если вас интересуют только значения, это хороший вариант, чтобы избежать выбора:

Попробуйте всегда ссылаться на рабочий лист

Это, вероятно, самая распространенная ошибка в vba. Всякий раз, когда вы копируете диапазоны, иногда рабочий лист не передается, и поэтому VBA рассматривает ActiveWorksheet.

Могу ли я действительно использовать .Select или .Activate для чего-либо?

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

Всегда указывайте книгу, рабочий лист и ячейку/диапазон.

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

И никогда не используйте индекс рабочей книги.

Вы не знаете, какие другие книги будут открыты, когда пользователь выполнит ваш код.

5 Eleshar

Использование IMOO .select происходит от людей, которые, как я, начали изучать VBA по необходимости, записывая макросы, а затем изменяя код, не понимая, что .select и последующий selection являются просто ненужными средними людьми.

.select можно избежать, как уже отмечалось, путем непосредственной работы с уже существующими объектами, что позволяет использовать различные косвенные ссылки, такие как вычисление я и j сложным образом, а затем редактирование ячейки (i, j) и т.д.

В противном случае нет ничего неявного в самом .select , и вы можете легко найти его для использования, например. У меня есть таблица, в которой я заполняю дату, активирую макрос, который делает с ним какую-то магию, и экспортирует его в приемлемом формате на отдельном листе, который, однако, требует некоторых окончательных ручных (непредсказуемых) входов в соседнюю ячейку. Итак, наступает момент для .select , который спасает меня от дополнительного движения мыши и нажатия.

Чтобы избежать использования метода .Select , вы можете установить переменную, равную требуемому свойству.

► Например, если вы хотите значение в Cell A1 , вы можете установить переменную, равную значению свойства этой ячейки.

► Например, если вы хотите кодовое имя «Sheet3», вы можете установить переменную, равную значению кодового имени этого рабочего листа.

  • Пример valTwo = Sheets(«Sheet3»).Codename

Надеюсь, это поможет. Дайте мне знать, если у вас есть вопросы.

4 LFB

Эти методы довольно стигматизированы, поэтому, взяв на себя инициативу @Vityata и @Jeeped ради рисования линии в песке:

Почему бы не назвать .Activate , .Select , Selection , ActiveSomething методы/свойства

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

Однако это определение определяет ситуации, в которых они призваны:

Когда звонить .Activate , .Select , .Selection , .ActiveSomething методы/свойства

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

Если вы разрабатываете и ожидаете, что пользователь выбрать экземпляры объектов для вашего кода для обработки, а затем .Selection или .ActiveObject являются apropriate.

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

Это пример, который очистит содержимое ячейки «A1» (или больше, если тип выделения — xllastcell и т.д.). Все это делается без необходимости выбора ячеек.

Я надеюсь, что это поможет кому-то.

Я заметил, что ни один из этих ответов не упоминает свойство.Offset. Это также можно использовать, чтобы избежать использования действия Select при манипулировании определенными ячейками, особенно в отношении выбранной ячейки (как указывает OP с помощью ActiveCell ).

Вот несколько примеров.

Я также предполагаю, что «ActiveCell» — J4.

ActiveCell.Offset(2, 0).Value = 12

  • Это изменит ячейку J6 на значение 12
  • Минус -2 будет ссылаться на J2
  • Это скопирует ячейку в k4 на L4 .
  • Обратите внимание, что «0» не требуется в параметре смещения, если не требуется (, 2)
  • Как и в предыдущем примере, минус 1 будет i4
  • Это очистит значения во всех ячейках в столбце k.

Это не значит, что они «лучше», чем вышеупомянутые варианты, но просто перечисляют альтернативы.

About the author

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

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