Разное

Vba справочник: Справочник по Visual Basic для приложений (VBA) для Excel

Содержание

VBA справочник столбцов в таблице

Я пытаюсь установить таблицу в VBA, однако я хочу установить только диапазон, чтобы быть конкретными столбцами внутри таблицы. Я не могу показаться, чтобы выяснить, как это сделать. Все, что я ищу, похоже, возвращает ссылку на таблицу excel, и это не кажется правильным синтаксисом для VBA. Это то,что у меня есть, но я получаю ошибку времени выполнения ‘9’: индекс вне диапазона.

Set Contact = Worksheets("Tables").ListObjects("Table1[[Column2]:[Column8]]")

edit: я не думаю, что мой вопрос был ясен. Я пытаюсь ссылаться на определенный диапазон в таблице, потому что я использую vlookup, чтобы найти данные, которые я ищу. Я ссылаюсь на информацию во втором столбце и получаю информацию в столбце 8, чтобы установить переменную. Поэтому я пытаюсь установить listobject как таблицу внутри более крупной таблицы.

excel

vba

Поделиться

Источник


MsAgentM    

06 февраля 2019 в 20:38

1 ответ


  • Изменение меток столбцов доступа через VBA

    Я уже некоторое время ищу решение этой проблемы и, похоже, не могу найти ничего подходящего. Можно ли изменить метки столбцов (заголовки) в таблице через VBA. Единственный способ, который я нахожу для этого, — это создать запрос на основе таблицы с параметрами в виде псевдонимов SQL. Однако он…

  • Суммирование значений столбцов в таблице

    У меня есть кнопки, которые могут добавлять строки, отменять последнюю добавленную строку и удалять все строки из таблицы. Наконец, у меня есть кнопка, которая должна добавить строку в конце таблицы, которая суммирует содержимое столбцов выше. Private Sub cmbSummarizeColumns_Click() Dim the_sheet…



2

Вы используете ListObjects("TableName") для ссылки на всю таблицу. Затем ListColumns("ColumnHeading") для ссылки на конкретные столбцы в таблице, где «ColumnHeading»-фактическое имя заголовка в таблице (или ListColumns(#) , где # -индексный номер столбца). Затем DataBodyRange для ссылки на диапазон данных столбца.

Вместо VLookup было бы лучше использовать Match , чтобы найти номер строки, и Range.Cells , чтобы получить результат.

Что-то вроде этого

Sub Demo()
    Dim lo As ListObject
    Dim SearchRange As Range
    Dim LookupRange As Range
    Dim SearchTerm As Variant
    Dim LookupItem As Variant
    Dim idx As Variant

    Set lo = Worksheets("Tables").ListObjects("Table1")
    Set SearchRange = lo.ListColumns("Column2").DataBodyRange
    Set LookupRange = lo.ListColumns("Column8").DataBodyRange

    SearchTerm = "YourSearchTerm"
    idx = Application.Match(SearchTerm, SearchRange, 0)
    If Not IsError(idx) Then
        LookupItem = LookupRange.Cells(idx, 1)
        ' use the result as you wish
        Debug.Print LookupItem
    Else
        ' SearchTerm not found.  What now?
    End If

    'For completeness, heres how to reference a range of columns
    Dim VLookupRange As Range
    Set VLookupRange = lo. Parent.Range(lo.ListColumns("Column2").DataBodyRange, lo.ListColumns("Column8").DataBodyRange)
    Debug.Print VLookupRange.Address

End Sub

Поделиться


chris neilsen    

06 февраля 2019 в 21:50


Похожие вопросы:

Максимальное количество столбцов в таблице

Проблема 1: каково максимальное количество столбцов, которые мы можем иметь в таблице Проблема 2: каково максимальное количество столбцов, которые мы должны иметь в таблице

Количество столбцов в таблице MySQL

Возможный Дубликат : Найдите количество столбцов в таблице Я хотел бы знать, что такое запрос, который позволяет подсчитать количество столбцов в таблице в MySQL. Что-то вроде : SELECT…

VBA textBox столбцов

Как я могу установить номер столбцов для textbox в VBA для Excel? (excel находится -> формы -> формат текстовое поле -> столбцы). Я пытался искать по всему интернету и офисной справке, но я могу…

Изменение меток столбцов доступа через VBA

Я уже некоторое время ищу решение этой проблемы и, похоже, не могу найти ничего подходящего. Можно ли изменить метки столбцов (заголовки) в таблице через VBA. Единственный способ, который я нахожу…

Суммирование значений столбцов в таблице

У меня есть кнопки, которые могут добавлять строки, отменять последнюю добавленную строку и удалять все строки из таблицы. Наконец, у меня есть кнопка, которая должна добавить строку в конце…

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

мне нужно получить несколько имен столбцов (заголовков) в таблице, связанных с определенным значением в ячейке как я уже объяснял, мне нужно получить названия заголовков, соответствующие значению n…

Код для выбора нескольких столбцов в таблице Excel

Я новичок в Excel VBA. Мне нужна модификация в моем коде, чтобы я мог двигаться дальше. Я хочу выбрать несколько столбцов таблицы в таблице excel. Вот мой код: Dim ws As Worksheet Dim tbl As…

VBA для вычисления конкретного выбора в таблице (excel)

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

VBA Выберите конкретную ячейку в таблице PowerPoint

Как выбрать конкретную ячейку в таблице PowerPoint ? Мне нужно вставить в таблицу PowerPoint, включая мое форматирование Excel, в определенную ячейку. Код находится в Excel! В частности, именно так…

Скрытие пустых столбцов в таблице в excel с помощью VBA

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

Функции VBA Excel для решения ряда задач механики жидкостей

1. ТАБЛИЦА ПЛОТНОСТЕЙ ЖИДКОСТЕЙ

Прежде всего, имеет смысл по таблице плотностей жидкостей [1] создать средствами VBA [2] пользовательскую функцию, назовем ее ПЛОТНОСТИ, которая будет возвращать величину плотности указанной жидкости.

Пользовательские функции Excel создаются в редакторе VB (Visual Basic), обозначаемом VBE. Командами РАЗРАБОТЧИК → VB → Insert → Module открывается модуль редактора, в который вводится (набирается с клавиатуры или копируется и вставляется) программный код пользовательской функции. Ограничиваясь небольшим числом жидкостей, код будет иметь вид:

Function ПЛОТНОСТИ(Жидкость As String)

Select Case Жидкость

Case «Вода морская»

ПЛОТНОСТИ = 1030

Case «Вода чистая»

ПЛОТНОСТИ = 1000

Case «Машинное масло»

ПЛОТНОСТИ = 900

Case «Керосин», «Спирт», «Нефть»

ПЛОТНОСТИ = 800

Case «Бензин»

ПЛОТНОСТИ = 710

End Select

End Function

Sub InstallFunc()

Application. MacroOptions Macro:= «ПЛОТНОСТИ», _ Description:=»Возвращает » & _

«величину плотности жидкости (кг/м3)»

End Sub

Заключительная часть кода, начинающаяся Sub InstallFunc(), – код описания функции, то, что в двойных кавычках после Description, будет появляться в диалоговом окне функции, только надо в эту часть кода установить курсор ввода и щелкнуть по кнопке  редактора VB. Пробел и нижнее подчеркивание – оператор переноса строки кода. После этого редактор VB закрывается.

Задача 1.1. Применяя функцию ПЛОТНОСТИ, определите плотность бензина.

Технология решения. 1. Командами Вставка функции (кнопка fx) → Определенные пользователем → ПЛОТНОСТИ открывается диалоговое окно и вводится наименование жидкости, что ниже возвращает ее плотность (рис. 1).

Рис. 1. Применение функции ПЛОТНОСТИ

2. ГИДРОСТАТИЧЕСКОЕ ДАВЛЕНИЕ

Давление в жидкости плотности ρ, когда высота столба жидкости h, находится [1] по формуле:

.        (1)

Создается функция пользователя ФДЖ (аббревиатура от ФОРМУЛА ДАВЛЕНИЯ ЖИДКОСТИ), возвращающая значение указанной переменной, входящей в формулу (1), когда заданы значения двух других переменных. Код функции ФДЖ и ее описания:

Function ФДЖ(Давлен_Па, Плот_кг_м3, Высота_м, _

P_Ro_H As String)

Select Case P_Ro_H

Case “P”

ФДЖ = 9.8 * Плот_кг_м3 * Высота_м

Case “Ro”

ФДЖ = Давлен_Па/ Высота_м /9.8

Case “H”

ФДЖ = Давлен_Па/ Плот_кг_м3/ 9.8

End Select

End Function

Sub InstallFunc1()

Application.MacroOptions Macro:=»ФДЖ», Description:= _ «Возвращает при P величину давления, » & _

«при Ro – плотности, при H — высоты»

End Sub

Задача 2.1. Определите давление бензина на дно цистерны, если высота столба бензина 5 м.

Технология решения. Вызывается функция ФДЖ, вводятся значения плотности, высоты и “P”, тогда ниже появляется результат (рис. 2).

Рис. 2. Применение функции ФДЖ в задаче 2.1

Задача 2.2. Определите плотность жидкости, если на глубине 3 м ее давление составляет 30282 Па.

Технология решения. Вызывается функция ФДЖ, вводятся данные задачи и “Ro” (рис. 3).

Рис. 3. Применение функции ФДЖ в задаче 2.2

Задача 2.3. Поршневой насос может произвести давление 4,9·105 Па. Определите на какую высоту можно поднять воду этим насосом.

Технология решения. Вызывается функция ФДЖ, вводятся данные задачи и “H” (рис. 4).

Рис. 4. Применение функции ФДЖ в задаче 2.3

3. ВЫТАЛКИВАЮЩАЯ СИЛА

Выталкивающая (Архимедова) сила, действующая на тело погруженное в жидкость, находится [1] по формуле:

.  (2)

Создается функция пользователя ФВС (аббревиатура от ФОРМУЛА ВЫТАЛКИВАЮЩЕЙ СИЛЫ), возвращающая значение указанной переменной, входящей в формулу (2), когда заданы значения других переменных. Код функции ФВС и ее описания:

Function ФВС(Сила_Н, Плот_кг_м3, Объем_м3, _

F_Ro_V As String)

Select Case F_Ro_V

Case “F”

ФВС = 9.8 * Плот_кг_м3 * Объем_м3

Case “Ro”

ФВС = Сила_Н /9.8 / Объем_м3

Case “V”

ФВС = Сила_Н /9.8 / Плот_кг_м3

End Select

End Function

Sub InstallFunc2()

Application.MacroOptions Macro:=»ФВС», Description:= _

«Находит при F величину выталкивающей силы, » & _

«при Ro – плотности, при V — объема»

End Sub

Задача 3.1. Найдите выталкивающую силу, действующую в морской воде на тело, объем которого 0,25 м3.

Технология решения. Вызывается функция ФВС, вводятся данные задачи и “F”, что ниже возвращает результат (рис. 5).

Рис. 5. Применение функции ФВС в задаче 3.1

Задача 3.2. Определите объем тела, погруженного в морскую воду, если величина выталкивающей силы 100 Н.

Технология решения. Вызывается функция ФВС, вводятся данные задачи и “V” (рис. 6).

Рис. 6. Применение функции ФВС в задаче 3.2

Задача 3.3. Определите плотность жидкости, если на погруженное в нее тело объемом 0,75 м3 действует выталкивающая сила 5880 Н.

Технология решения. Вызывается функция ФВС, вводятся данные задачи и “Ro” (рис. 7).

Рис. 7. Применение функции ФВС в задаче 3.3

НОУ ИНТУИТ | Лекция | VBA-редактор

Аннотация: Немалая часть работы VBA-программиста проводится в так называемом визуальном режиме.
Здесь не требуется знания особенностей написания команд на VBA или управляющих структур языка.
Вы работаете с командами меню, создаёте формы, настраиваете элементы управления, создаете обработчики событий.
Эта лекция посвящена VBA-редактору и особенностям работы с ним.

3.1. Особенности главного меню VBA-редактора

intuit.ru/2010/edi»>Окно редактора Visual Basic выглядит одинаково во всех приложениях Microsoft Office. Давайте рассмотрим главное меню этого окна, описав назначение наиболее часто используемых пунктов.

  • File (Файл) — служит для работы с файлами.
  • File • Save — сохраняет файл.
  • File • Import File — позволяет импортировать внешний файл в редактор. Например, таким образом можно добавить в свой проект модуль (то есть — программный код) или форму.
  • File • Export File — экспортирует данные из редактора во внешний файл. Например, этой командой можно сохранить редактируемую форму и передать ее другому разработчику.
  • File • Close and Return To Microsoft Word — закрывает VBA-редактор и возвращается в Microsoft Word (аналогичная команда есть и для MS Excel). Вы можете просто переключаться между редактором и основным приложением в Панели задач Windows, не закрывая редактор.
  • Edit (Правка) — содержит команды для правки. Помимо стандартных команд отмены и возврата последнего действия ( Undo, Redo ), вырезания, копирования, вставки ( Cut, Copy, Insert ), поиска ( Find ), это меню содержит несколько особенных команд. В частности, это List Properties/Methods (Список Свойств/Методов) и другие.
  • View (Вид) — cодержит команды для отображения различных окон редактора. Названия команд соответствуют названиям окон.
  • Insert (Вставка) — служит для вставки в проект форм ( Insert • User Form ), модулей ( Insert • Module ), процедур ( Insert • Procedure ), файлов ( Insert • File ) и модулей класса ( Insert • Class Module ). Чаще всего вам придется вставлять в проект формы. Эти команды продублированы на панели инструментов редактора.
  • Format (Форматирование) — служит для управления расположением элементов управления на формах.
  • Debug (Отладка) — содержит команды, позволяющие отлаживать программы.
  • Run (Запуск) — содержит команды для управления выполнением программ. В частности, команда Run • Sub/User Form (Запуск • Процедура/Форма) запускает на выполнение активную процедуру или форму (рядом с этой командой стоит характерный зеленый треугольник). Команда Run • Break (Запуск • Приостановить) — приостанавливает выполнение программы, команда Run • Reset (Запуск • Перезапуск) – останавливает выполнение программы. Эти команды продублированы на панели инструментов редактора в виде кнопок с соответствующими пиктограммами.
  • Tools (Инструменты) — содержит средства для настройки свойств редактора, подключения дополнительных библиотек объектов.
  • Add-Ins (Дополнения) — позволяет управлять дополнениями. По умолчанию это меню содержит лишь одну команду, запускающую менеджер дополнений.
  • Window (Окно) — стандартные команды для работы с окнами.
  • Help (Помощь) — помощь по VBA.

В дальшейнем мы подробно рассмотрим многие из команд главного меню. А сейчас давайте поговорим об окне Project — вам постоянно придется пользоваться им.

3.2. Подробности об окне Project

Окно Project служит для навигации по проекту (рис. 3.1.).

Рис.
3. 1.
Окно Project

Каждый открытый документ представляет собой отдельный проект. На рис. 3.1. вы можете видеть окно Project для только что созданного документа MS Word. В проект добавлена форма.

Проект имеет иерархическую структуру. Так, в разделе Microsoft Word Objects (Объекты Microsoft Word) мы можем видеть объект ThisDocument (Этот документ), то есть документ, который мы создали. В разделе Forms (Формы) мы можем видеть объект UserForm1 — только что вставленную в проект форму.

Чтобы отобразить объект, достаточно сделать по нему двойной щелчок или нажать на кнопку View Object (вторая слева в верхней части окна Project ). Чтобы просмотреть код объекта надо нажать на кнопку View Code (крайняя левая кнопка).

Щелкнув правой кнопкой мыши по названию проекта, можно увидеть его контекстное меню. Это меню содержит наиболее часто используемые команды для работы с проектами. В частности, особый интерес представляет команда Project Properties (Свойства проекта).

В окне Project Properties обратите внимание на вкладку Protection (Защита). Она позволяет защитить проект от просмотра и закрыть его паролем.

Для защиты проекта от просмотра установите галочку в поле Lock project for viewing (Закрыть проект от просмотра), для закрытия проекта паролем, введите в поля Password (Пароль) и Confirm password (Подтвердить пароль) пароль.

Существует специальное ПО, которое позволяет восстанавливать забытые пароли к VBA-проектам. Как вы понимаете, оно может помочь получить доступ в проект не только законным владельцам, но и злоумышленникам. Поэтому если вы, например, передаете кому-то ценный VBA-проект по слабо защищенным каналам связи — лучше зашифруйте весь файл с помощью какой-нибудь программы шифрования.

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

Прежде чем подписать проект, нужно создать цифровой сертификат для проектов VBA. Чтобы создать его, пройдите по пути Пуск • Все программы • Microsoft Office • Microsoft Office Tools • Digital Certificate for VBA Projects. Введите в появившемся окне имя для сертификата.

Чтобы теперь подписать проект, выделите его в окне Project и воспользуйтесь командой Tools • Digital Signature. В появившемся окне нажмите на кнопку Выбрать — появится окно для выбора сертификата. Выберите из этого окна интересующий вас сертификат. В нашем случае здесь присутствует лишь один, заранее созданный, сертификат. Вот как выглядит окно цифровой подписи после завершения выбора (рис. 3.2.)

Рис.
3.2.
Цифровая подпись проектов

intuit.ru/2010/edi»>Учтите, что автоматически создаваемый сертификат считается надежным лишь на том компьютере, в хранилище сертификатов которого он находится. Если вы подпишите свои проекты, вы сможете один раз разрешить их использование, выбрав соответствующий пункт в окне настройки безопасности макросов.

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

Теперь займемся работой с формами и элементами управления

3.3. Формы и элементы управления

03-01-Формы и элементы управления.docm — пример п. 3.3. — 3.6

Создайте новый документ Microsoft Word и откройте редактор VBA. Вставьте в проект новую форму командой Insert • User Form (Вставка • Форма). Вот что должно получиться (рис. 3.3.).

Как видите, форма — это пустая заготовка будущего диалогового окна вашего приложения.

По краям новой формы вы можете видеть маркеры выделения. С их помощью можно настраивать ее размеры.

Обратите внимание на окно Properties (Свойства). Как вы уже знаете, оно содержит свойства объектов. Для выбора объекта, свойства которого будут отображены в этом окне, нужно либо выделить объект, либо указать его в списке, который находится в верхней части окна Properties.

Окно Toolbox (Элементы управления) содержит элементы управления, которые можно добавлять на форму. Элементы управления — это все то, что служит для управления работой программ. Например: кнопки, поля ввода, полосы прокрутки и так далее.

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

intuit.ru/2010/edi»>Нажмем на кнопку Toolbox’а с изображением кнопки и добавим новую кнопку на форму. Вот, что у нас получилось (рис. 3.4.).

Вокруг кнопки вы можете видеть маркеры выделения, которые служат для изменения ее размера. «Схватив» элемент управления мышью, вы можете перемещать его по форме.

неплохое: 2009

инструкцию по газовому оборудованию скачать жени отрдной Alleycode HTML Editor 2 16 2 скачать на русском скачать драйверы для NVIDIA GeForce 7050 / NVIDIA nForce 610i конг-фу панда скачать счет скачать скачать «Кайфую» скачать бесплатный клип Madcon beggin скачать бесплатно sp1 Музыку скачать 21 грам саундтрек скачать скачать Adobe illustrator Rus скачать игры на nokia 6300 скачать прошивку на nokia 6300 скачать бесплатно the bat скачать бесплатно mp3 коммунизм скачать одежду к симс 2 скачать песню баста,гуф,центр -город дорог скачать компьютерные логические игры шарики скачать бесплатно игру симсоны скачать sav Devil May Cry 3 SE скачать программу которая открывает файл типа SVF Вдох-выдох скачать скачать fddshow скачать бесплатно simple plain — your love is just a lie скачать программу для конвектарции файлов скачать бесплатно из flv в 3gp империя добра скачать звери — пока, пока скачать бесплатно скачать моя мамулечка скачать Adobe Photoshop бесплатно скачать Fruity Loops Studio Full (RUS) скачать Discord Action Bars 3 15 ImTOO 3GP Video Converter v3 1 скачать скачать моды для игры Gta San Andreas русская рыбала скачать бесплатно игра Чудо-ферма скачать программы на комуникатор скачать проги для взлома сети (скачать бесплатно) скачать фильмы с помощью torrent скачать S&M скачать Macross Frontier скачать клип Безатветно Меладзе и Приходько скачать бесплатно переводчика скачать игры для Sega virtual dj скачать скачать игры типа FarCry скачать игры косынка сапер паук скачать Nero 7 бесплатно скачать opera для benq-siemens скачать бесплатно одноклассники на телефон скачать песню break the ice скачать игровые автоматы бесплатно скачать DJ Rooster and Sammy Peralta — Jupiter (Funkatronik mix) прклятые короли скачать Настя Задарожная «подруга»(скачать без регистрации) скачать Ultad VideoStudio 11 скачать wc3 ключи на Kaspersky internet security 7 скачать бесплатно лолита скачать куб скачать мастер бургер 2 скачать ключ Филипп Киркоров, Ты не поверишь, скачать скачать Acronis Home На сайте вы можете скачать скачать donna summer once upon a time в формате wav скачать книги букам нет полный текст Конституции РФ скачать бесплатно трофим скачать говорят на земле скачать клипы mxpx бесплатно скачать hard rock скачать патч для Call of Duty 2 Kaith Sweat — Nobody скачать Смысловые галюцинации скачать скачать КВН казахи скачать CHUBBY CHECKER — LET’S TWIST AGAIN tascam gigastudio 4 скачать Никита — Улетели Навсегда скачать бесплатно скачать counter-strike с ботами частное видео пэрис хилтон скачать бесплатно скачать программное обеспичение для нокиа N70 скачать бесплатно The beatles — Michael скачать программу для n73 blac list скачать ashalt 3 скачать игру UEFA EURO 2008 yf psp скачать спидхак для 2/4/3 скачать патч на two worlds скачать книгу трансферинг реальности adobe photoshop скачать скачать русификатор NOD32 3 0 650 скачать бесплатно песню слава»классный» скачать и установить бесплатно анти вирус на русском языке скачать игры для Sony ericsson w200i монстр шарлиз терон скачать бесплатно Домашние финансы скачать фильм (скачать) Deep In The Heart u2 скачать скачать java приложения lkz ыфьыгтп у250 скачать бесплатно mp3 Лесник los lobos скачать бесплатно лимонов скачать книги бесплатно скачать драйвер DSS25 скачать иудшумуюьз3 скачать mp3 где ты,я иду за тобою? скачать Naruto Shippuuden 067 Татьяна Маркова песни скачать бесплатно скачать дополнения к warhammer 40 000 dark crusade скачать игры для нинтендо скачать wh aim cs 1 6 скачать бесплатно песню Daffy «Merci» Peppermint Twist-Sweet скачать скачать photo watermark professional скачать музыку с сайта zaicev net fallaut скачать скачать рисунки татуировок скачать русский язык для dreamweaver скачать пробные приложения антивируса касперского скачать вера брежнева я не играю скачать игру Star Kraft бесплатно скачать фулаут 2 далеко далеко журавли улетели скачать Альбомы Сборники — скачать mp3 бесплатно, без регистрации! скачать

Office Visual Basic для приложений (VBA), ссылка

  • 2 минуты на чтение

В этой статье

Office Visual Basic для приложений (VBA) — это язык программирования, управляемый событиями, который позволяет расширять приложения Office.

Программирование VBA в офисе

Этот справочник предназначен для опытных пользователей Office, которые хотят узнать о VBA и получить представление о том, как программирование может помочь им в настройке Office.

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

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

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

См. Также

Поддержка и отзывы

Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Начало работы с VBA в Office

  • 25 минут на чтение

В этой статье

Вы сталкиваетесь с повторяющейся очисткой пятидесяти таблиц в Word? Вы хотите, чтобы конкретный документ предлагал пользователю вводить данные при его открытии? Вам сложно понять, как эффективно перенести контакты из Microsoft Outlook в электронную таблицу Microsoft Excel?

Вы можете выполнять эти задачи и многое другое, используя Visual Basic для приложений (VBA) для Office — простой, но мощный язык программирования, который можно использовать для расширения приложений Office.

Эта статья предназначена для опытных пользователей Office, которые хотят узнать о VBA и понять, как программирование может помочь им в настройке Office.

Пакет приложений Office обладает богатым набором функций. Существует множество различных способов создания, форматирования и управления документами, электронной почтой, базами данных, формами, электронными таблицами и презентациями. Великая сила программирования на VBA в Office заключается в том, что почти все операции, которые вы можете выполнить с помощью мыши, клавиатуры или диалогового окна, также можно выполнить с помощью VBA.Кроме того, если это можно сделать один раз с помощью VBA, то так же легко и сто раз. (Фактически, автоматизация повторяющихся задач — одно из наиболее распространенных применений VBA в Office.)

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

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

Примечание

Заинтересованы в разработке решений, расширяющих возможности Office на нескольких платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Когда использовать VBA и почему

Есть несколько основных причин рассмотреть возможность программирования на VBA в Office.

Автоматизация и повторение

VBA эффективен и действенен, когда дело доходит до повторяющихся решений проблем форматирования или исправления. Например, вы когда-нибудь меняли стиль абзаца вверху каждой страницы в Word? Вам когда-нибудь приходилось переформатировать несколько таблиц, которые были вставлены из Excel в документ Word или электронное письмо Outlook? Приходилось ли вам когда-нибудь вносить одно и то же изменение в несколько контактов Outlook?

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

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

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

Взаимодействие между офисными приложениями

Вам нужно скопировать все ваши контакты из Outlook в Word, а затем отформатировать их определенным образом? Или вам нужно переместить данные из Excel в набор слайдов PowerPoint? Иногда простое копирование и вставка не делает того, что вы хотите, или оно выполняется слишком медленно. Вы можете использовать программирование на VBA для одновременного взаимодействия с деталями двух или более приложений Office, а затем изменять содержимое в одном приложении на основе содержимого в другом.

Как поступить иначе

Программирование на VBA — мощное решение, но не всегда оптимальный подход. Иногда имеет смысл использовать другие способы для достижения своих целей.

Важнейший вопрос, который нужно задать, — есть ли более простой способ. Прежде чем начать проект VBA, рассмотрите встроенные инструменты и стандартные функции. Например, если у вас есть трудоемкая задача редактирования или макета, подумайте об использовании стилей или клавиш-ускорителей для решения проблемы. Можете ли вы выполнить задачу один раз, а затем использовать CTRL + Y (Повторить), чтобы повторить ее? Можете ли вы создать новый документ с правильным форматом или шаблоном, а затем скопировать содержимое в этот новый документ?

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

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

Программирование на VBA 101

Использование кода для работы приложений

Вы можете подумать, что написание кода загадочно или сложно, но основные принципы основаны на повседневных рассуждениях и вполне доступны. Приложения Microsoft Office созданы таким образом, что они предоставляют объекты, называемые объектами, которые могут получать инструкции, почти так же, как в телефоне созданы кнопки, которые вы используете для взаимодействия с телефоном. Когда вы нажимаете кнопку, телефон распознает инструкцию и включает соответствующий номер в последовательность, которую вы набираете. В программировании вы взаимодействуете с приложением, отправляя инструкции различным объектам в приложении. Эти объекты обширны, но у них есть свои пределы. Они могут делать только то, для чего они предназначены, и они будут делать только то, что вы им прикажете делать.

Например, представьте пользователя, который открывает документ в Word, вносит несколько изменений, сохраняет документ, а затем закрывает его. В мире программирования VBA Word предоставляет объект Document. Используя код VBA, вы можете указать объекту Document выполнять такие действия, как «Открыть», «Сохранить» или «Закрыть».

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

Объектная модель

Разработчики организуют программные объекты в иерархию, и эта иерархия называется объектной моделью приложения. Word, например, имеет объект Application верхнего уровня, который содержит объект Document. Объект Document содержит объекты Paragraph и так далее. Объектные модели примерно отражают то, что вы видите в пользовательском интерфейсе. Они представляют собой концептуальную карту приложения и его возможностей.

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

Когда объект существует, вы можете управлять им, задавая его свойства и вызывая его методы. Если вы думаете об объекте как о существительном, свойства — это прилагательные, которые описывают существительное, а методы — это глаголы, которые оживляют существительное. Изменение свойства меняет качество внешнего вида или поведения объекта.Вызов одного из методов объекта заставляет объект выполнить какое-то действие.

Код VBA в этой статье работает с открытым приложением Office, в котором многие объекты, которыми манипулирует код, уже запущены и работают; например, само приложение, рабочий лист в Excel, документ в Word, презентация в PowerPoint, объекты проводника и папки в Outlook. Узнав базовый макет объектной модели и некоторые ключевые свойства приложения, которые предоставляют доступ к его текущему состоянию, вы можете начать расширять и управлять этим приложением Office с помощью VBA в Office.

Методы

В Word, например, вы можете изменять свойства и вызывать методы текущего документа Word с помощью свойства ActiveDocument объекта Application . Это свойство ActiveDocument возвращает ссылку на объект Document , который в настоящее время активен в приложении Word. «Возвращает ссылку на» означает «дает вам доступ к».

Следующий код делает именно то, что говорит; то есть сохраняет активный документ в приложении.

  Application.ActiveDocument.Save
  

Прочтите код слева направо: «В этом приложении с документом, на который ссылается ActiveDocument, вызовите метод Save ». Имейте в виду, что Save — простейшая форма метода; это не требует от вас каких-либо подробных инструкций. Вы передаете объекту Document команду Save , и это не требует от вас дополнительных действий.

Если для метода требуется дополнительная информация, эти сведения называются параметрами.Следующий код запускает метод SaveAs , для которого требуется новое имя файла.

  Application.ActiveDocument.SaveAs («Имя нового документа.docx»)
  

Значения, перечисленные в скобках после имени метода, являются параметрами. Здесь новое имя файла является параметром для метода SaveAs .

Недвижимость

Вы используете тот же синтаксис, чтобы установить свойство, которое вы используете для чтения свойства. Следующий код выполняет метод выбора ячейки A1 в Excel, а затем устанавливает свойство для помещения чего-либо в эту ячейку.

  Application.ActiveSheet.Range ("A1"). Выберите
    Application.Selection.Value = "Привет, мир"
  

Первая задача в программировании на VBA — получить представление об объектной модели каждого приложения Office и прочитать синтаксис объекта, метода и свойства. Объектные модели аналогичны во всех приложениях Office, но каждая зависит от типа документов и объектов, с которыми она работает.

В первой строке фрагмента кода находится объект Application , на этот раз Excel, а затем ActiveSheet , который обеспечивает доступ к активному рабочему листу.После этого идет термин, который не так знаком, Range, что означает «определить таким образом диапазон ячеек». Код инструктирует Range создать себя только с A1 в качестве определенного набора ячеек. Другими словами, первая строка кода определяет объект Range и запускает для него метод, чтобы выбрать его. Результат автоматически сохраняется в другом свойстве Application , которое называется Selection .

Вторая строка кода устанавливает для свойства Value объекта Selection текст «Hello World», и это значение отображается в ячейке A1.

Простейший код VBA, который вы пишете, может просто получить доступ к объектам в приложении Office, с которым вы работаете, и задать свойства. Например, вы можете получить доступ к строкам в таблице в Word и изменить их форматирование в сценарии VBA.

Звучит просто, но может быть невероятно полезным; как только вы сможете написать этот код, вы сможете использовать всю мощь программирования для внесения тех же изменений в несколько таблиц или документов или внести их в соответствии с некоторой логикой или условием.Для компьютера внесение 1000 изменений ничем не отличается от внесения 10, поэтому здесь есть экономия на масштабе с более крупными документами и проблемами, и именно здесь VBA может действительно проявить себя и сэкономить ваше время.

Макросы

и редактор Visual Basic

Теперь, когда вы знаете кое-что о том, как приложения Office предоставляют свои объектные модели, вы, вероятно, захотите попробовать вызвать методы объекта, задать свойства объекта и отреагировать на события объекта. Для этого вы должны написать свой код в месте и таким образом, чтобы Office мог его понять; обычно с помощью редактора Visual Basic. Хотя он установлен по умолчанию, многие пользователи даже не знают, что он доступен, пока он не будет включен на ленте.

Все приложения Office используют ленту. Одна вкладка на ленте — это вкладка Developer , где вы получаете доступ к редактору Visual Basic и другим инструментам разработчика. Поскольку Office не отображает вкладку Developer по умолчанию, необходимо включить ее, выполнив следующую процедуру:

Включение вкладки «Разработчик»

  1. На вкладке Файл выберите Параметры , чтобы открыть диалоговое окно Параметры .

  2. Выберите Настроить ленту в левой части диалогового окна.

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

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

  5. Выбрать ОК .

Примечание

В Office 2007 вы открыли вкладку Developer , нажав кнопку Office, выбрав Options , а затем установив флажок Show Developer на ленте в категории Popular диалогового окна Options .

После включения вкладки Developer легко найти кнопки Visual Basic и Macros .

Рисунок 1.Кнопки на вкладке «Разработчик»

Проблемы безопасности

Чтобы защитить пользователей Office от вирусов и опасного кода макроса, вы не можете сохранить код макроса в стандартном документе Office, который использует стандартное расширение файла. Вместо этого вы должны сохранить код в файле со специальным расширением. Например, вы не можете сохранять макросы в стандартном документе Word с расширением .docx; вместо этого вы должны использовать специальный документ Word с поддержкой макросов с расширением . docm.

Когда вы открываете файл.docm, служба безопасности Office может по-прежнему препятствовать запуску макросов в документе, сообщая вам или не сообщая об этом. Изучите настройки и параметры в Центре управления безопасностью всех приложений Office. Настройка по умолчанию отключает запуск макроса, но предупреждает вас, что макросы были отключены, и дает вам возможность снова включить их для этого документа.

Вы можете назначить определенные папки, в которых могут запускаться макросы, создав «Надежные расположения», «Надежные документы» или «Надежные издатели». Самый переносимый вариант — использовать Trusted Publishers, который работает с документами с цифровой подписью, которые вы распространяете.Для получения дополнительных сведений о параметрах безопасности в конкретном приложении Office откройте диалоговое окно Параметры , выберите Центр управления безопасностью , а затем выберите Параметры центра управления безопасностью .

Примечание

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

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

Когда вы нажимаете кнопку Macro на вкладке Developer , открывается диалоговое окно Macros , которое дает вам доступ к подпрограммам или макросам VBA, к которым вы можете получить доступ из определенного документа или приложения. Кнопка Visual Basic открывает редактор Visual Basic, в котором вы можете создавать и редактировать код VBA.

Другая кнопка на вкладке Developer в Word и Excel — это кнопка Record Macro , которая автоматически генерирует код VBA, который может воспроизводить действия, которые вы выполняете в приложении. Record Macro — потрясающий инструмент, который вы можете использовать, чтобы узнать больше о VBA. Чтение сгенерированного кода может дать вам представление о VBA и обеспечить надежный мост между вашими знаниями Office как пользователя и вашими знаниями как программиста. Единственное предостережение заключается в том, что сгенерированный код может сбивать с толку, потому что редактор макросов должен делать некоторые предположения о ваших намерениях, и эти предположения не обязательно точны.

Для записи макроса
  1. Откройте Excel в новой книге и выберите вкладку Developer на ленте.Выберите Record Macro и примите все настройки по умолчанию в диалоговом окне Record Macro , включая Macro1 в качестве имени макроса и This Workbook в качестве местоположения.

  2. Выберите OK , чтобы начать запись макроса. Обратите внимание, как текст кнопки изменится на Остановить запись . Нажмите эту кнопку в тот момент, когда вы завершите действия, которые хотите записать.

  3. Выберите ячейку B1 и введите классическую первую строку программиста: Hello World.Прекратите печатать и посмотрите на кнопку Остановить запись ; он неактивен, потому что Excel ожидает, когда вы закончите вводить значение в ячейке.

  4. Выберите ячейку B2, чтобы завершить действие в ячейке B1, а затем выберите Остановить запись .

  5. Выберите Macros на вкладке Developer , выберите Macro1 , если он не выбран, а затем выберите Edit , чтобы просмотреть код из Macro1 в редакторе Visual Basic.

Рис. 2. Код макроса в редакторе Visual Basic

Смотрим на код

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

  Субмакрос1 ()
'
'Macro1 Macro
'
'
    Диапазон ("B1").  Выберите
    ActiveCell.FormulaR1C1 = "Привет, мир"
    Диапазон ("B2"). Выбрать
Конец подписки
  

Обратите внимание на сходство с предыдущим фрагментом кода, в котором выделен текст в ячейке A1, и на различия.В этом коде выбирается ячейка B1, а затем строка «Hello World» применяется к ячейке, которая была сделана активной. Кавычки вокруг текста указывают строковое значение, а не числовое значение.

Помните, как вы выбрали ячейку B2, чтобы снова отобразить кнопку Остановить запись ? Это действие также отображается как строка кода. Регистратор макросов записывает каждое нажатие клавиши.

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

Когда средство записи макросов генерирует код, он использует сложный алгоритм для определения методов и свойств, которые вы намеревались. Если вы не узнаете данное свойство, существует множество доступных ресурсов, которые могут вам помочь.Например, в записанном макросе средство записи макросов сгенерировало код, который ссылается на свойство FormulaR1C1 . Не знаете, что это значит?

Примечание

Имейте в виду, что Application объект подразумевается во всех макросах VBA. Записанный вами код работает с приложением . в начале каждой строки.

Использование справки разработчика

Выберите FormulaR1C1 в записанном макросе и нажмите F1. Справочная система выполняет быстрый поиск, определяет, что соответствующие темы находятся в разделе Excel Developer справки Excel, и перечисляет свойство FormulaR1C1 . Вы можете выбрать ссылку, чтобы узнать больше об этом свойстве, но прежде обратите внимание на ссылку Справочник по объектной модели Excel в нижней части окна. Выберите ссылку, чтобы просмотреть длинный список объектов, которые Excel использует в своей объектной модели для описания рабочих листов и их компонентов.

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

  Рабочие листы (1) .Range ("A1"). Borders.LineStyle = xlDouble
  

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

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

Иногда лучший способ научиться программированию — это внести незначительные изменения в рабочий код и посмотреть, что в результате произойдет.Попробуй это сейчас. Откройте Macro1 в редакторе Visual Basic и измените код на следующий.

  Субмакрос1 ()
    Рабочие листы (1) .Range ("A1"). Value = "Wow!"
    Рабочие листы (1) .Range ("A1"). Borders.LineStyle = xlDouble
Конец подписки
  

Подсказка

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

Вам не нужно сохранять код, чтобы опробовать его, поэтому вернитесь к документу Excel, выберите Macros на вкладке Developer , выберите Macro1 , а затем выберите Run .Ячейка A1 теперь содержит текст Wow! и имеет двойную рамку вокруг него.

Рисунок 3. Результаты вашего первого макроса

Вы просто объединили запись макроса, чтение документации по объектной модели и простое программирование, чтобы создать программу VBA, которая что-то делает. Поздравляю!

Не получилось? Читайте предложения по отладке в VBA.

Советы и приемы программирования

Начать с примеров

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

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

Сделайте задачу проще

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

Ошибки и отладка

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

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

Например, строковые значения должны быть заключены в двойные кавычки в VBA.Чтобы узнать, что происходит при использовании одинарных кавычек, вернитесь в редактор Visual Basic и замените «Wow!» строка в примере кода с «Вау!» (то есть слово Wow заключено в одинарные кавычки). Если вы выберете следующую строку, редактор Visual Basic отреагирует. Ошибка «Ошибка компиляции: Ожидается: выражение» не так полезна, но строка, которая генерирует ошибку, становится красной, чтобы сообщить вам, что у вас есть синтаксическая ошибка в этой строке, и в результате эта программа не будет запущена.

Выберите OK и снова измените текст на «Вау!».

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

Например, откройте редактор Visual Basic и измените имя свойства Value на ValueX в макросе, намеренно вводя ошибку времени выполнения, поскольку объект Range не имеет свойства с именем ValueX. Вернитесь к документу Excel, откройте диалоговое окно Macros и снова запустите Macro1. Вы должны увидеть окно сообщения Visual Basic, в котором объясняется ошибка времени выполнения с текстом: «Объект не поддерживает это свойство метода.»Хотя этот текст ясен, выберите Отладка , чтобы узнать больше.

Когда вы возвращаетесь в редактор Visual Basic, он находится в специальном режиме отладки, в котором желтым цветом отображается строка кода, в которой произошел сбой. Как и ожидалось, выделена строка, содержащая свойство ValueX.

Вы можете вносить изменения в работающий код VBA, поэтому измените ValueX обратно на Value и нажмите маленькую зеленую кнопку воспроизведения под меню Debug . Программа должна снова запуститься в обычном режиме.

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

Скважина со справочными материалами

Чтобы открыть справочник разработчика, встроенный в справку Office, откройте справку справки из любого приложения Office, выбрав вопросительный знак на ленте или нажав клавишу F1. Затем справа от кнопки Search выберите стрелку раскрывающегося списка, чтобы отфильтровать содержимое. Выберите Справочник разработчика . Если вы не видите оглавление на левой панели, выберите маленький значок книги, чтобы открыть его, а затем разверните оттуда ссылку на объектную модель.

Рис. 5. Фильтрация в справке разработчика применяется ко всем приложениям Office

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

Конечно, Центр разработчиков Microsoft Office — отличный портал для статей, советов и информации сообщества.

Поиск в форумах и группах

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

Любой поиск в Интернете по запросу «форум разработчиков офисных приложений» обнаруживает несколько групп обсуждения. Вы можете выполнить поиск по «офисному развитию» или описанию своей проблемы, чтобы найти форумы, сообщения в блогах и статьи.

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

Ниже приведены некоторые правила этикета, которым следует следовать при публикации сообщений на форуме разработчиков:

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

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

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

  • Будьте вежливы и выразите признательность.

Дальнейшее программирование

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

В этом разделе вкратце обсуждаются еще несколько ключевых тем.

Переменные

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

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

  Dim MyStringVariable As String
    MyStringVariable = "Вау!"
    Рабочие листы (1) .Range ("A1"). Value = MyStringVariable
  

Разветвление и зацикливание

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

  Субмакрос1 ()
    Если Worksheets (1) .Range ("A1"). Value = "Да!" потом
        Dim i как целое число
        Для i = от 2 до 10
            Рабочие листы (1) .Range ("A" & i) .Value = "OK!" & I
        Далее я
    Еще
        MsgBox «Поместите Да! В ячейку A1»
    Конец, если
Конец подписки
  

Введите или вставьте код в редактор Visual Basic, а затем запустите его.Следуйте инструкциям в появившемся окне сообщения и измените текст в ячейке A1 из Wow! к Да! и запустите его еще раз, чтобы увидеть возможности зацикливания. Этот фрагмент кода демонстрирует переменные, ветвление и цикл. Внимательно прочтите его после того, как увидите его в действии, и попытайтесь определить, что происходит при выполнении каждой строки.

Все мои приложения Office: пример кода

Вот несколько сценариев, которые стоит попробовать; каждый из них решает реальную проблему Office.

Создать электронную почту в Outlook

  Sub MakeMessage ()
    Тусклое сообщение OutlookMessage как Outlook. MailItem
    Установите OutlookMessage = Application.CreateItem (olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Установите OutlookMessage = Nothing
Конец подписки
  

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

Удалить пустые строки на листе Excel

  Sub DeleteEmptyRows ()
    SelectedRange = Selection.Rows.Count
    ActiveCell.Offset (0, 0). Выбрать
    Для i = 1 To SelectedRange
        Если ActiveCell.Value = "" Тогда
            Selection.EntireRow.Delete
        Еще
            ActiveCell.Offset (1, 0) .Select
        Конец, если
    Далее я
Конец подписки
  

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

Удалить пустые текстовые поля в PowerPoint

  Sub RemoveEmptyTextBoxes ()
    Dim SlideObj как слайд
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    Для каждого SlideObj в ActivePresentation. Слайды
        Для ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Установите ShapeObj = SlideObj.Shapes (ShapeIndex)
            Если ShapeObj.Type = msoTextBox Тогда
                Если Trim (ShapeObj.TextFrame.TextRange.Text) = "" Тогда
                    ShapeObj.Delete
                Конец, если
            Конец, если
        Следующий ShapeIndex
    Следующий SlideObj
Конец подписки
  

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

Копирование контакта из Outlook в Word

  Sub CopyCurrentContact ()
   Dim OutlookObj как объект
   Dim InspectorObj как объект
   Dim ItemObj как объект
   Установите OutlookObj = CreateObject ("Outlook.Application")
   Установите InspectorObj = OutlookObj.ActiveInspector
   Установите ItemObj = InspectorObj. CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & "from" & ItemObj.CompanyName)
Конец подписки
  

Имейте в виду, что этот код копирует текущий открытый контакт в Outlook в открытый документ Word.Этот код работает, только если в Outlook есть контакт, открытый для проверки.

Поддержка и отзывы

Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

Проверить или добавить ссылку на библиотеку объектов (VBA)

  • 2 минуты на чтение

В этой статье

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

Чтобы узнать, предоставляет ли приложение библиотеку объектов

  1. В меню Инструменты выберите Ссылки , чтобы открыть диалоговое окно Ссылки .

  2. В диалоговом окне Ссылки показаны все библиотеки объектов, зарегистрированные в операционной системе. Прокрутите список до приложения, библиотеку объектов которого вы хотите сослаться.Если приложения нет в списке, вы можете использовать кнопку Обзор для поиска библиотек объектов (* .olb и * .tlb) или исполняемых файлов (* .exe и * .dll в Windows). Ссылки, флажки которых установлены, используются вашим проектом; те, которые не выбраны, не используются, но могут быть добавлены.

Чтобы добавить ссылку на библиотеку объектов в свой проект

  • Выберите ссылку на библиотеку объектов в поле Доступные ссылки в диалоговом окне Ссылки и выберите OK . Теперь в вашем проекте Visual Basic есть ссылка на библиотеку объектов приложения. Если вы откроете обозреватель объектов (нажмите F2) и выберите библиотеку приложения, он отобразит объекты, предоставленные выбранной библиотекой объектов, а также методы и свойства каждого объекта.

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

См. Также

Поддержка и отзывы

Есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.

VBA Visual Basic Editor — Ссылки

Ссылки

Вы можете ссылаться на библиотеки объектов, чтобы сделать их объекты доступными в вашем коде (Инструменты> Ссылки) .
Любые ссылки на внешние библиотеки объектов сохраняются в отдельном файле.
Прежде чем вы сможете использовать какие-либо функции, объекты, методы или свойства из внешних библиотек объектов, вы должны сначала добавить на них ссылку.

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

AddFromFile
AddFromGuid
Remove

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

Раннее связывание

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

  • Код намного быстрее, как и все связи между библиотеками уже проверены и скомпилированы.

  • Оператор New может использоваться для создания экземпляров внешних объектов.

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

  • Excel отображает сведения об элементах автоматического списка, краткой автоматической информации и подсказках автоматических данных для объектов во время разработки приложения.

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

Позднее связывание

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

Если библиотеки нет в списке, она помечается как «ОТСУТСТВУЕТ».

ОТСУТСТВУЕТ

Если какая-либо из ссылок отсутствует, она не найдет никаких ссылок
SS
Вы можете просмотреть библиотеки объектов (. olb и .tlb) или исполняемые файлы (.exe и .dll). Иногда вы можете обнаружить, что у вас есть «отсутствующие» ссылки.
Предполагая, что это не требуется, отмените выбор и выберите (Отладка> Скомпилировать проект).

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

Обозреватель объектов

Любые ссылки, которые вы добавляете в свой проект, будут автоматически добавлены в раскрывающийся список библиотек в обозревателе объектов.

Общие функции

Имя функции Описание
URLDownloadFile Загружает биты из Интернета и сохраняет их в виде файла
winodw с определенным именем класса
SetWindowLong Изменяет атрибут указанного окна
DrawMenuBar Перерисовывает строку меню в указанном окне
GetWindowLong


© 2021 Better Solutions Limited. Все права защищены. © 2021 Better Solutions Limited TopPrevNext

Excel Объектная модель VBA и ссылки на объекты: Основное руководство

Если вы читали какие-либо другие руководства по макросам или VBA в Power Spreadsheets, вы, вероятно, заметили, что некоторые термины продолжают появляться и над.

Одна из концепций, которые постоянно возникают и будут появляться в будущих руководствах, — это объекты. Основная причина этого проста:

VBA «свободно основан на концепции объектно-ориентированного программирования».Как объясняет Джон Уокенбах в Excel 2013 Bible , это «означает, что он манипулирует объектами».

Как следствие вышесказанного, , если вы действительно хотите освоить макросы Excel и Visual Basic для приложений, вы должны хорошо разбираться в следующих трех темах :

  • Объектов.
  • Как управлять объектами VBA.
  • Объектная модель Excel VBA.

Мои две основные цели при написании этого руководства по VBA:

  • Объясните основные характеристики объектной модели Excel VBA.
  • Проиллюстрируйте, как вы создаете ссылки на объекты VBA при работе с Visual Basic для приложений. Это позволяет вам идентифицировать объект Excel VBA, с которым вы хотите работать и манипулировать.

Точнее, в этом уроке по макросам я объясняю следующие темы :

С самого начала я скажу, что темы объектной модели VBA в Excel и построения объектных ссылок VBA не очень просты. Однако…

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

Давайте начнем с ответа на первый вопрос, который, вероятно, у вас есть относительно введения, которое я сделал выше, с понимания…

Почему важна объектная модель VBA в Excel

Visual Basic для приложений входит в состав большинства продуктов, входящих в состав Microsoft Office. Помимо Excel, список приложений с VBA включает PowerPoint, Word и Access.

Это подчеркивает одно из больших преимуществ изучения VBA:

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

Одна из основных тем, которые вам нужно освоить, чтобы достичь такого уровня знаний, — это объекты .Причина этого четко объяснена Джоном Уокенбахом в Excel 2013 Power Programming with VBA :

Секрет использования VBA с другими приложениями заключается в понимании объектной модели для каждого приложения. В конце концов, VBA просто манипулирует объектами, и каждый продукт (Excel, Word, Access, PowerPoint и т. Д.) Имеет свою собственную уникальную объектную модель.

ОК. Таким образом, объектная модель Excel VBA очень важна. Следующий вопрос, который может у вас возникнуть:

Что такое объектная модель VBA в Excel

Я сделаю это коротко.Как объяснил представитель Excel Дик Куслейка:

Объектная модель — это большая иерархия всех объектов, которые вы можете использовать в VBA.

Помимо других преимуществ, эта иерархия упрощает ссылки на объекты VBA. Поэтому рассмотрим подробнее…

Иерархия объектов VBA в Excel

Иерархия объектов выглядит следующим образом:

Когда вы работаете с определенным программным приложением, в первую очередь следует учитывать само приложение (объект Application).Как правило, приложение находится на вершине иерархии.

В случае Excel объектом Application является сам Excel .

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

Объект Application содержит другие объекты VBA. Некоторые из объектов VBA, содержащихся в объекте приложения Excel, следующие:

  • Надстройки, содержащие все объекты надстроек.
  • Windows, которая (на этом уровне) содержит все объекты Window в приложении.
  • Workbooks, который содержит все объекты Workbook.

Каждый из этих объектов VBA, в свою очередь, может содержать другие объекты. Например, как объяснил Джон Уокенбах в Excel VBA Programming for Dummies , некоторые из объектов VBA, которые могут содержаться в объекте Workbook, следующие:

  • Charts, который содержит объекты Chart.
  • Names, который содержит объекты Name.
  • VBProjects, который представляет открытые проекты.
  • Windows, которая (на этом уровне) содержит объекты Window в указанной книге Excel.
  • Рабочий лист, содержащий объекты рабочего листа.

Опять же, эти объекты VBA могут содержать другие объекты. Продолжая пример Уокенбаха, объект Worksheet может содержать следующие объекты VBA:

  • ChartObject, содержащий объекты ChartObject.
  • Комментарий, представляющий комментарий ячейки.
  • Гиперссылка, представляющая гиперссылку.
  • Имя, которое представляет собой определенное имя для определенного диапазона ячеек.
  • PageSetup, который используется для хранения информации о печати.
  • сводных таблиц, которые содержат объекты сводных таблиц.
  • Диапазон, который представляет ячейки, строки, столбцы, выборки ячеек с смежными блоками ячеек или трехмерные диапазоны.

    Как я объясняю здесь, объект Range является одним из самых важных (и наиболее часто используемых) объектов.

Графически часть иерархии объектов VBA в Excel, описанная выше, выглядит примерно так:

Изображение выше показывает только очень небольшую часть иерархии объектов Excel VBA . Если вы хотите увидеть огромное количество объектов VBA, имеющихся в Excel, взгляните на карту объектной модели Excel 2007 или Справочник по объектной модели Excel.

Если это выглядит ошеломляющим, не волнуйтесь. Вы определенно не одиноки. Даже сам Джон Уокенбах написал:

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

Что вы можете с этим сделать?

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

К счастью, это неверно. Вы определенно можете освоить Visual Basic для приложений, несмотря на огромное количество объектов Excel VBA.Для этого есть несколько причин, в том числе следующие:

  • На практике вы обычно имеете дело с ограниченным количеством объектов VBA . Есть некоторые предметы, которые вам вряд ли когда-нибудь понадобятся (или понадобятся очень редко).
  • Если вы застряли при работе над определенной проблемой, вы можете использовать определенные стратегии для определения, какие объекты Excel VBA использовать . Например, в Excel VBA Programming for Dummies Walkenbach предлагает использовать средство записи макросов для обнаружения объектов VBA.

Кроме того, продолжая работать с Visual Basic для приложений, вы начнете замечать логику, лежащую в основе структуры иерархии объектов Excel VBA.

Коллекции объектов

Коллекции определяются двумя основными характеристиками:

  • Они сами являются объектами.
  • Их основная цель — группировать объекты VBA одного класса и управлять ими.

Другими словами, коллекции — это объекты VBA, которые используются для группировки и управления другими объектами (которые связаны).

Тот факт, что вы можете группировать несколько объектов VBA и управлять ими с помощью коллекций, чрезвычайно полезен в некоторых ситуациях. Представьте, например, что вы хотите сделать что-то с определенной группой объектов или с определенной группой объектов. Если все эти объекты являются частью одной коллекции, вы можете структурировать свой код VBA, чтобы пройти через каждого из членов коллекции и выполнить желаемые действия. Как вы понимаете, эта структура проще, чем, например, перечисление каждого из членов коллекции по отдельности.

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

В Excel VBA Programming for Dummies Джон Уокенбах перечисляет следующие примеры общих коллекций:

  • Рабочие книги, который представляет собой набор всех рабочих книг Excel, открытых в данный момент.
  • Рабочие листы, собрание всех рабочих листов Excel в определенной Рабочей книге.
  • Диаграммы, который группирует все листы диаграмм, которые находятся внутри определенной Рабочей книги.
  • листов, который представляет собой совокупность всех листов в конкретной книге. В этом случае не имеет значения тип листа. Таким образом, эта коллекция включает в себя как рабочие листы, так и листы диаграмм.

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

К настоящему времени вы, вероятно, уже хорошо понимаете, что такое объект и коллекция. Итак, перейдем к реальной практике. Давайте посмотрим, как можно начать ссылаться на объекты VBA с помощью Visual Basic для приложений:

Введение в ссылки на объекты VBA

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

Вопрос, как ты это делаешь? Как вы ссылаетесь на объект в Visual Basic для приложений?

Давайте рассмотрим некоторые из наиболее распространенных и основных ситуаций. Цель этого раздела — служить введением в ссылки на объекты VBA. Есть много других более сложных случаев. Например, я объясню несколько способов ссылки на объект Range VBA в Excel Объектная модель VBA и ссылки на объекты: Основное руководство , которое вы можете найти в архивах.

Ссылки на объекты

: полные ссылки и подключение объектов VBA

Давайте начнем с того, что посмотрим, как ссылаться на объект, пройдя через всю иерархию объектов Excel VBA.Это называется полностью квалифицированной ссылкой, потому что вы точно указываете Excel, с каким объектом VBA хотите работать, ссылаясь на всех его родителей.

Как я объясню в следующих разделах, обычно можно упростить полностью квалифицированные ссылки . Тем не менее, вы должны узнать, как работают полностью квалифицированные ссылки . Они являются основой объектных ссылок VBA, и на практике вы будете использовать их большую часть времени. Кроме того, они весьма полезны для лучшего понимания кода VBA, стоящего за вашими макросами.

Вы уже знаете, что объект наверху иерархии объектов Excel VBA — это Приложение. Обратиться к этому объекту очень просто. В редакторе Visual Basic вы обратитесь к приложению, набрав:

Заявка

С этого момента вам нужно начать движение по иерархии с помощью оператора точки (.). Другими словами, вы подключаете каждый объект VBA к предыдущему ( родительский объект ) с помощью точки (.) .Как объяснил Microsoft MVP Джон Акампора, эти точки (.) Используются для соединения и ссылки на элементы объектной модели Excel VBA «сверху вниз».

Чтобы увидеть это на практике, вернемся к примеру иерархии объектов Excel VBA, который я показал выше. Предположим, вы хотите сослаться на объект Range. Как показано на приведенном ниже графике, этот объект находится внизу пирамиды, используемой в примере. Между приложением и объектом Range есть 2 объекта VBA и 3 шага, как показано на изображении ниже:

Вы уже знаете, что вам просто нужно соединить разные объекты точкой (. ), пока вы спускаетесь по иерархии объектов Excel VBA. Другими словами, вы знаете, что в очень общих чертах вы можете ссылаться на объект Range, используя следующую базовую структуру:

Приложение.Рабочие тетради.Рабочие таблицы.Диапазон

Графически:

Easy, не так ли?

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

  • Если существует несколько книг или листов, как Excel узнает, о какой из них я говорю?
  • Как Excel узнает, с каким диапазоном я хочу работать?

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

Как вы ссылаетесь на конкретный объект в коллекции?

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

Ссылки на объекты VBA: объект из коллекции

Вероятно, большую часть времени вы будете работать с конкретным объектом VBA из коллекции . Это контрастирует с коллекцией в целом.

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

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

Вариант №1: Использование имени объекта VBA.

В этом случае синтаксис, который вы должны использовать для ссылки на объект, — это «Имя_сборки (« Имя_объекта »)» . Другими словами:

  • # 1: Имя соответствующей коллекции (collection_name) идет первым.
  • # 2: Имя_сборки следует за круглыми скобками ().
  • # 3: В скобках указано имя отдельного объекта VBA (Object_name).
  • # 4: Имя объекта VBA заключено в кавычки («»).

    Если вы не добавите кавычки, Excel поймет, что имя объекта VBA является именем переменной. Следовательно, он не сможет идентифицировать нужный вам объект.

    Другими словами, не забывайте цитаты при использовании этого метода ссылки на объект VBA.

Например, если вы работаете с книгой Excel, содержащей 3 листа, и хотите работать с Sheet1, вы можете использовать одно из следующих действий:

Рабочие листы («Лист1»)

или

листов («Sheet1»)

Вариант № 2: Использование порядкового номера.

Если вы решите использовать эту опцию, вы обратитесь к объекту VBA с помощью «Имя_собрания (индекс_номер)» . Эта структура практически такая же, как и выше, со следующими двумя отличиями :

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

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

Задания (1)

или

Листы (1)

Теперь, когда вы знаете, как ссылаться на отдельный объект VBA в коллекции, давайте вернемся к полной ссылке, которую я использовал в качестве примера в разделе выше:

Приложение. Рабочие тетради. Рабочие тетради. Ассортимент

Как вы можете это сделать, предполагая, что объект, с которым вы хотите работать, — это ячейка A1 из листа Sheet1 внутри Workbook Book1?

Если вы используете имя объекта для ссылки на каждый из отдельных объектов VBA (вариант №1 выше), полная ссылка для этой ячейки будет:

Application.Workbooks («Book1.xlsx»). Worksheets («Sheet1»). Range («A1»)

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

Есть несколько способов упростить ссылки на объекты, сделав код VBA намного короче. Давайте посмотрим на некоторые методы, которые вы можете применить для этих целей…

Упрощение полностью квалифицированных ссылок на объекты

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

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

Упрощение полностью определенных ссылок на объекты небезопасно . В частности, второй метод упрощения, описанный ниже, полагается на то, что вы правильно определите текущую активную Рабочую книгу и Рабочий лист.Если вы совершите ошибку, например, думая, что текущий активный рабочий лист — это Sheet1, тогда как на самом деле это Sheet2, вы столкнетесь с проблемами. Наиболее вероятные проблемы, с которыми вы столкнетесь в этих случаях:

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

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

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

Фактически, в Excel VBA Programming for Dummies Джон Уокенбах говорит, что:

Часто лучше полностью квалифицировать ссылки на объекты VBA.

Другие эксперты по Excel, такие как Дик Куслейка, также заявили, что они обычно не полагаются на объекты по умолчанию, за некоторыми исключениями . Одно из этих основных исключений, как я объясню ниже, зависит от объекта по умолчанию Application. Этот конкретный объект VBA редко включается в код VBA, хотя в некоторых случаях вы должны ссылаться на приложение.

Другими словами, глубокое знание объектной модели Excel VBA и использование полностью квалифицированных ссылок дает два основных преимущества:

Альтернативой крайним вариантам полного уточнения ссылок или их упрощению, которые предлагают и Валькенбах, и Куслейка, является использование операторов With… End With.Эти операторы упрощают синтаксис макросов, выполняя несколько операторов, которые относятся к одному и тому же объекту VBA. В то же время, благодаря своей структуре, они позволяют поддерживать полностью определенные ссылки на объекты.

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

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

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

Упрощение №1: объект приложения.

Основным объектом VBA по умолчанию является объект приложения. Как упоминалось на dailydoseofexcel.com, этот объект всегда предполагается , и не имеет значения, где на самом деле находится код VBA.

При создании макросов предполагается, что вы будете работать с Excel.Другими словами, Excel предполагает, что вы работаете с объектом Application. Поэтому, как и следовало ожидать, вы можете вообще опустить этот объект Excel VBA в своих ссылках на объекты.

Согласно Джону Уокенбаху в книге Excel VBA Programming for Dummies , ввод объекта Application имеет смысл только в некоторых случаях .

Применение этого ярлыка к оператору, относящемуся к ячейке A1 в Sheet1 в Book1, который использовался в качестве примера, упрощает ссылку следующим образом:

Рабочие тетради («Книга1. xlsx »). Рабочие листы (« Sheet1 »). Диапазон (« A1 »)

Упрощение № 2: Активная рабочая тетрадь и рабочий лист.

Вторая группа объектов по умолчанию, которые вы можете использовать для упрощения полных ссылок на объекты , применяется, когда вы работаете внутри стандартного модуля . В редакторе Visual Basic вы обычно можете найти стандартные модули в окне проекта в узле «Модули»:

В этих случаях, помимо предположения, что вы работаете с объектом Application, Excel также предполагает, что вы работаете с активной книгой.

Следовательно, , если вы знаете, что текущая активная книга Excel — это рабочая книга, с которой вы хотите работать, вы можете опустить эту часть ссылки на объект VBA . Продолжая приведенный выше пример, оператор может быть сокращен до следующего:

Рабочие листы («Лист1»). Диапазон («А1»)

Наконец, , если вы уверены, что лист Excel, с которым вы хотите работать, является текущим активным листом, вы также можете опустить эту часть ссылки на объект VBA . Приведенное выше утверждение можно сократить еще больше:

Диапазон («A1»)

В дополнение к опасностям использования этого упрощения, которые я объясняю в начале этого раздела, вы должны учитывать еще один аспект. Два предположения, которые я перечислил в Упрощении №2 выше, работают только до тех пор, пока вы находитесь в стандартном модуле . Следовательно, вы не должны полагаться на эти предположения при работе с другим типом модуля. Например, как описано в Ежедневной дозе Excel:

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

  • Если вы находитесь в модуле листа, таком как модуль Sheet1, и не ссылаетесь на соответствующий лист, по умолчанию в Excel используется лист, содержащий код VBA.

Заключение

Объектная модель VBA в Excel чрезвычайно важна. Вы не можете игнорировать эту тему, если действительно хотите стать мастером макросов Excel и Visual Basic для приложений . По словам Джона Уокенбаха:

Полное понимание объектной модели VBA в Excel абсолютно необходимо для всех, кому нужно писать нетривиальные макросы Excel.

Объектная модель VBA

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

Если вы изучили этот конкретный учебник по VBA, , вы не только хорошо понимаете, что такое объектная модель VBA в Excel, но также знаете, как начать создание объектных ссылок в Visual Basic для приложений .Эта возможность создавать соответствующие ссылки на объекты VBA — это то, что позволяет вам указать Excel, с каким объектом вы хотите работать и манипулировать. Это важный навык, который теперь у вас есть в вашем поле знаний VBA.

Из-за сложности и обширности объектной модели VBA в Excel, — это тема, которую мы все постоянно изучаем и изучаем .

Книги, на которые есть ссылки в этом учебном пособии по Excel

  • Вокенбах, Джон (2013). Библия Excel 2013. Индианаполис, IN: John Wiley & Sons Inc.
  • Вокенбах, Джон (2013). Программирование Excel VBA для чайников. Хобокен, Нью-Джерси: John Wiley & Sons Inc.,

18 полезных способов обращения к диапазонам ячеек

Что первое, что приходит вам в голову, когда думаешь об Excel?

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

Это руководство по VBA дает базовое объяснение того, как работать с ячейками с помощью Visual Basic для приложений. Точнее, в этом посте я объясняю все основные детали, которые вам нужно знать для работы с объектом Excel VBA Range. Диапазон — это объект, который вы используете для ссылок и работы с ячейками в VBA.

Однако важность объекта Excel VBA Range этим не исчерпывается. Значительная часть работы, которую вы выполняете с Excel, связана с объектом Range.Объект Range — один из наиболее часто используемых объектов в Excel VBA.

Несмотря на важность диапазона VBA в Excel, создание ссылок на объекты обычно является одной из самых запутанных тем для пользователей, которые начинают работать с макросами и Visual Basic для приложений. В случае диапазонов ячеек это (до некоторой степени) понятно, поскольку VBA позволяет ссылаться на диапазоны разными способами .

Факт остается фактом: независимо от того, насколько запутанной может быть тема объекта Excel VBA Range, вы должны освоить его, чтобы стать специалистом по макросам и VBA. Моя основная цель в этом руководстве по VBA — помочь вам разобраться в основных вопросах, связанных с этой темой, и проиллюстрировать наиболее распространенные способы обращения к объекту Excel VBA Range с помощью Visual Basic для приложений .

Точнее, , в этом посте вы узнаете о следующих темах, связанных с объектом Excel VBA Range :

Давайте начнем с более детального рассмотрения…

Что такое объект диапазона VBA в Excel

Диапазон VBA Excel является объектом.Объекты — это то, чем управляет Visual Basic для приложений.

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

  • Отдельная ячейка.
  • Строка или столбец ячеек.
  • Выбор ячеек, независимо от того, являются ли они смежными или нет.
  • Трехмерный диапазон.

Как видно из вышеизложенного, размер объектов Excel VBA Range может сильно различаться. На самом базовом уровне вы можете ссылаться на одну (1) ячейку. С другой стороны, у вас есть возможность ссылаться на все ячейки на листе Excel.

Несмотря на эту гибкость при обращении к ячейкам в конкретном листе Excel, объект Excel VBA Range имеет некоторые ограничения. Наиболее актуально то, что вы можете использовать только для ссылки на один рабочий лист Excel за раз . Следовательно, чтобы ссылаться на диапазоны ячеек на разных листах, вы должны использовать отдельные ссылки для каждого из листов.

Как обратиться к объекту диапазона VBA в Excel

Первое, что вам нужно узнать, чтобы освоить объект VBA Range в Excel, — это как обращаться к нему. В следующих разделах объясняются наиболее важные правила, которые вам нужно знать, чтобы создавать соответствующие ссылки.

Первые несколько разделов охватывают самый простой способ обращения к объекту Excel VBA Range: свойство Range . Таким же образом средство записи макросов обычно обращается к объекту Range.

Однако ниже вы найдете некоторые дополнительные методы для создания ссылок на объекты, такие как использование свойств Cells или Offset.

Однако это не единственный способ ссылаться на объекты Excel VBA Range. Есть несколько более продвинутых методов, таких как использование метода Application.Union, которые я не рассматриваю в этом руководстве по VBA для начинающих.

Вам может быть интересно, какой способ лучше всего использовать для ссылки на объект Excel VBA Range?

Как правило, лучший метод для создания ссылки на объект Excel VBA Range зависит от контекста и ваших конкретных потребностей .

Введение в ссылки на объект диапазона VBA в Excel и квалификатор объекта

Чтобы правильно работать с объектами Range, вы должны понимать, как работать с двумя основными частями ссылки на объект Excel VBA Range :

  • Квалификатор объекта. Это относится к общим правилам для создания ссылок на объекты. Я подробно освещаю эту тему здесь.
  • Соответствующее свойство или метод, который вы используете для возврата объекта Range.В более общем плане это относится к конкретным правилам, применимым к ссылке на объект Excel VBA Range .

В этом руководстве по VBA основное внимание уделяется второму элементу, указанному выше: основным свойствам, которые вы можете использовать для ссылки на объект Excel VBA Range.

Тем не менее, ниже я объясню несколько ключевых моментов, касающихся привязки к объектам. Если вы хотите узнать больше об общих правилах, применяемых к ссылкам на объекты, обратитесь к документу Excel VBA Object Model And Object References: The Essential Guide , который вы можете найти в архивах.

Введение в полностью квалифицированные ссылки на объекты VBA

Объекты могут действовать как контейнеры для других объектов.

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

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

Эти типы конкретных ссылок известны как полностью определенные ссылки.

Как выглядит полная ссылка в случае объекта Excel VBA Range?

Объект наверху иерархии объектов Excel VBA — Приложение. Само приложение содержит другие объекты.

Объект Excel VBA Range содержится в объекте Worksheet. Точнее:

  • Объект Worksheet имеет свойство Range (Worksheet.Классифицировать).
  • Свойство Worksheet.Range возвращает объект Range.

Родительским объектом Worksheets является объект Workbook. Сами книги содержатся в объекте Application.

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

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

 
 Приложение.  Рабочие тетради.Рабочие листы. Диапазон 

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

Как обратиться к объекту из коллекции

В Visual Basic для приложений коллекция объектов — это группа связанных объектов .

Как рабочие книги, так и рабочие листы, которые используются для создания полной ссылки на объект Excel VBA Range, являются примерами коллекций.Существует 2 основных способа ссылки на конкретный объект в коллекции :

  • Используйте имя объекта VBA. В этом случае используется синтаксис «Имя_сборки (« Имя_объекта »)».
  • Используйте порядковый номер вместо имени объекта. Если вы выберете эту опцию, основным синтаксисом будет «Имя_сборки (номер_индекса)».

Обратите внимание, как в первом методе вы должны использовать кавычки («») в круглых скобках. Если вы используете второй метод, вам не нужно заключать Index_number в кавычки.

Предположим, что вы хотите работать с Рабочим листом с именем «Sheet1» в Рабочей книге «Book1.xlsm». В зависимости от того, какой из 2 методов для ссылки на объект в коллекции вы используете, ссылка выглядит по-разному.

Если вы создаете ссылку, используя имя объекта VBA, ссылка будет выглядеть следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range 

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

 
 Приложение.Рабочие тетради (1). Рабочие листы (1). Диапазон 

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

Упрощение полностью квалифицированных ссылок на объекты

Объектная модель VBA в Excel содержит некоторые объекты по умолчанию. Они предполагаются, если вы не введете что-то другое.

Полные ссылки на объекты можно упростить, полагаясь на эти объекты VBA по умолчанию .Обычно я не предлагаю делать это вслепую, так как это сопряжено с некоторыми опасностями.

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

  • Объект Application.
  • Активные объекты Workbook и Worksheet.

Объект Application всегда предполагается. Другими словами, Visual Basic для приложений всегда предполагает, что вы работаете с самим Excel. Следовательно, вы можете упростить ваши полностью определенные ссылки на объекты, опуская Application.Например, в случаях, которые я использую в качестве примера выше, упрощенные ссылки выглядят следующим образом:

 
 Рабочие тетради ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон
Рабочие тетради (1). Рабочие листы (1). Диапазон 

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

Однако вы также можете использовать эти 2 объекта по умолчанию для создания еще более простых ссылок на объекты VBA. Продолжая с теми же примерами выше, они становятся:

 
 Диапазон 

На этом мы подошли к концу введения в общие правила создания ссылок на объекты VBA. В этом резюме объясняется, как создавать полностью определенные ссылки и упрощать их для целей создания квалификатора объекта, который вы используете при создании ссылок на объект Excel VBA Range.

В следующих разделах основное внимание уделяется конкретным правилам, которые можно применять для ссылки на объект Excel VBA Range. Это наиболее часто используемые свойства для возврата объекта Range.

Как обратиться к объекту диапазона VBA в Excel с помощью свойства диапазона

В приведенных выше разделах до некоторой степени объясняются основные правила, которые можно применять для ссылки на объект Excel VBA Range. Давайте начнем с напоминания о 2 методах, которые вы можете использовать для создания полной справки, если вы работаете с листом под названием «Лист1» в книге под названием «Книга1.xlsm ».

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range
Приложение. Рабочие тетради (1). Рабочие листы (1). Диапазон 

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

Возможно, самый простой способ обратиться к объекту Excel VBA Range — использовать свойство Range. При применении это свойство возвращает объект Range, который представляет ячейку или диапазон ячеек .

Существует две версии свойства Range: свойство Worksheet.Range и свойство Range.Range. Логика, стоящая за ними обоими, по существу одинакова. Основное различие заключается в том, к какому объекту они применяются:

  • В случае свойства Worksheet. Range, свойство Range применяется к рабочему листу.
  • При использовании свойства Range.Range значение Range применяется к диапазону.

Другими словами, свойство Range может применяться к 2 различным типам объектов :

  • Объекты рабочего листа.
  • Объекты дальности.

В приведенных выше разделах я объясняю, как создавать полностью определенные ссылки на объекты. Вы, наверное, заметили, что во всех приведенных выше примерах родительский объект Excel VBA Range является объектом Worksheet. Другими словами, в этих случаях свойство Range применяется к объекту Worksheet.

Однако вы также можете применить свойство Range к объекту Range. Если вы это сделаете, объект, возвращаемый свойством Range, изменится.

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

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

Базовый синтаксис свойства диапазона

Базовый синтаксис , который можно использовать для ссылки на объект диапазона VBA в Excel, — «выражение.Диапазон («Cell_Range») ». Вы заметите, что этот синтаксис соответствует общим правилам, которые я объяснил выше для других объектов VBA, таких как Workbooks и Worksheets. В частности, вы заметите, что есть 4 основных элемента:

  • Элемент № 1: Ключевое слово «Диапазон».
  • Элемент № 2: Круглые скобки после ключевого слова.
  • Элемент № 3: Соответствующий диапазон ячеек. Я объясню различные способы определения диапазона ниже.
  • Элемент № 4: Котировки. Cell_Range, на который вы ссылаетесь, обычно находится в кавычках («»).

В этом конкретном случае «выражение» — это просто переменная, представляющая объект Worksheet (в случае свойства Worksheet.Range) или объект Range (для объекта Range.Range).

Возможно, наиболее интересным элементом синтаксиса свойства Range является Cell_Range.

Давайте посмотрим на некоторые его характеристики…

В очень общих чертах, обычно можно ссылаться на Cell_Range так же, как вы используете при написании обычной формулы Excel .Это означает использование ссылок в стиле A1. Однако есть несколько важных особенностей, о которых я расскажу в этом разделе.

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

Вы можете использовать 2 разных синтаксиса для определения диапазона , с которым вы хотите работать:

Синтаксис №1: («Ячейка1»)

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

  • Строка, выражающая адрес диапазона ячеек.
  • Имя именованного диапазона ячеек.

При присвоении имени диапазону можно использовать любой из следующих 3 операторов:

  • Двоеточие (:): Это оператор, который вы используете для настройки массивов. В контексте ссылки на диапазоны ячеек вы можете использовать для ссылки на целые столбцы или строки, диапазоны смежных ячеек или диапазоны несмежных ячеек.
  • Пробел (): Это оператор пересечения. Как показано ниже, вы можете использовать оператор пересечения для ссылки на ячейки, которые являются общими для двух отдельных диапазонов.
  • Запятая (,): Это оператор объединения, который можно использовать для объединения нескольких диапазонов. Как показано в примере ниже, вы можете использовать этот оператор при работе с диапазонами несмежных ячеек.
Синтаксис № 2: «(Ячейка1, Ячейка2)»

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

  • «Ячейка1» — это ячейка в верхнем левом углу диапазона.
  • «Ячейка2» — это ячейка в правом нижнем углу диапазона.

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

  • Объекты полигона;
  • Адреса диапазона ячеек;
  • Имена диапазонов именованных ячеек; или
  • Комбинация вышеперечисленных предметов.

Давайте посмотрим на некоторые конкретные применения свойства Range:

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

Если объект Excel VBA Range, на который вы хотите сослаться, представляет собой одну ячейку, синтаксис будет просто «Диапазон (« Ячейка »)» . Например, если вы хотите сделать ссылку на одну ячейку, такую ​​как A1, введите «Диапазон (« A1 ″) ».

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

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1").Диапазон ("A1") 

Вы, наверное, заметили кое-что очень важное:

Не существует объекта Cell. Ячейка не является объектом сама по себе. Ячейки содержатся в объекте Range .

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

Фактически это свойство (Ячейки) можно использовать для ссылки на диапазон .Я объясню, как это сделать, ниже.

В приведенном выше примере свойство Range применяется к объекту Worksheet. Другими словами, это пример свойства Worksheet.Range.

Теперь давайте посмотрим, что произойдет, если к объекту Range применить свойство Range:

Как указать одну ячейку относительно другого диапазона с помощью свойства Range.

Range

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

 
 Выбор.Диапазон ("A1") 

Далее, предположим, что текущий выбор — это диапазон ячеек от C3 до D5 (ячейки C3, C4, C5, D3, D4 и D5) активного листа Excel. Этот выбор — объект Range.

Поскольку объект Selection представляет текущую выбранную область в документе, ссылка выше возвращает ячейку C3. Он не возвращает ячейку A1, как предыдущая полная ссылка.

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

Создание ссылок путем применения свойства Range к объекту Range не очень просто. Я лично нахожу это немного запутанным и нелогичным.

Однако возможность ссылаться на ячейки по отношению к другому диапазону имеет ряд преимуществ.Это позволяет вам (например) ссылаться на ячейку, не зная заранее ее адрес.

К счастью, у есть альтернативы для ссылки на конкретную ячейку по отношению к диапазону . Основным из них является свойство Range.Offset, о котором я расскажу ниже.

Как сослаться на весь столбец или строку с помощью свойства Worksheet.Range

Объекты диапазона VBA в Excel могут состоять из полных строк или столбцов. Вы можете указать для ссылки на всю строку или столбец следующим образом:

  • Строка: «Диапазон (« Row_Number: Row_Number »)».
  • Столбец: «Диапазон (« Column_Letter: Column_Letter »)».

Например, если вы хотите обратиться к первой строке (Строка 1) определенного рабочего листа Excel, синтаксис будет «Диапазон (« 1: 1 ″) ».

Если, с другой стороны, вы хотите сослаться на первый столбец (столбец A), вы вводите «Диапазон (« A: A »).

Предполагая, что вы работаете с Листом 1 в Book1.xlsm, полные ссылки будут следующими:

 
 Приложение.Рабочие тетради ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("1: 1")
Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A: A") 

Как сослаться на диапазон смежных ячеек с помощью свойства Worksheet.Range

Вы можете ссылаться на диапазон ячеек, используя следующий синтаксис: «Диапазон (« Cell_Range ») . Я описываю, как вы можете использовать 2 разных синтаксиса для целей ссылки на эти типы диапазонов выше:

  • Путем определения полного диапазона.
  • Путем определения диапазона, присвоения имен ячейкам в его верхнем левом и нижнем правом углах.

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

Если вы хотите сделать ссылку на диапазон ячеек между ячейками A1 и B5 (A1, A2, A3, A4, A5, B1, B2, B3, B4 и B5), подходящим синтаксисом будет «Диапазон (« A1: B5 ″) ». Продолжая работать с Sheet1 в Book1.xlsm, полная ссылка будет следующей:

 
 Application.Workbooks ("Книга1.xlsm "). Таблицы (" Sheet1 "). Диапазон (" A1: B5 ") 

Однако, если вы решите применить второй синтаксис, в котором вы очерчиваете соответствующий диапазон, соответствующим синтаксисом будет «Диапазон (« A1 »,« B5 ″) ». В этом случае полностью квалифицированная ссылка выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1", "B5") 

Как сослаться на диапазон несмежных ячеек с помощью свойства Worksheet.Range

Синтаксис для ссылки на диапазон несмежных ячеек в Excel очень похож на синтаксис, используемый для ссылки на диапазон смежных ячеек.Вы просто разделяете разные области запятой (,) . Следовательно, основной синтаксис — «Диапазон (« Диапазон_ячейки_1, Диапазон_ячейки _ #,… »)» .

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

  • Ячейки от A1 до B5 (A1, A2, A3, A4, A5, B1, B2, B3, B4 и B5).
  • Ячейки с D1 по D5 (D1, D2, D3, D4 и D5).

Вы можете обратиться к такому диапазону, набрав «Диапазон (« A1: B5, D1: D5 ″) ». В этом случае полностью квалифицированная ссылка выглядит следующим образом:

 
 Приложение.Рабочие тетради ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: B5, D1: D5") 

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

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

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

Я описываю, как при использовании свойства Range вы можете использовать 3 оператора для определения соответствующего диапазона выше.Мы уже рассмотрели примеры, в которых используются операторы двоеточия (:) и запятой (,). Они использовались в предыдущих разделах для обозначения диапазонов смежных или несмежных ячеек.

Третий оператор , пробел (), полезен, когда вы хотите сослаться на пересечение двух диапазонов . Причина понятна:

Оператор space () и есть оператор пересечения.

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

  • Ячейки от B1 до B10 (B1, B2, B3, B4, B5, B6, B7, B8, B9 и B10).
  • Ячейки от A5 до C5 (A5, B5 и C5).

В этом случае соответствующий синтаксис — «Диапазон (« B1: B10 A5: C5 ″) ». При работе с Sheet1 Book1.xlsm полная ссылка может быть построена следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("B1: B10 A5: C5") 

Такая ссылка возвращает ячейки, общие для двух диапазонов. В этом конкретном случае единственная ячейка, которая является общей для обоих диапазонов, — это B5.

Как сослаться на именованный диапазон VBA с помощью свойства Worksheet.

Range

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

Например, если вы хотите создать ссылку на диапазон VBA с именем «Excel_Tutorial_Example», соответствующий синтаксис — «Range (« Excel_Tutorial_Example »)».В этом случае полностью квалифицированная ссылка выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("Excel_Tutorial_Example") 

Не забудьте заключить имя диапазона в кавычки («»). Если вы не используете кавычки, Visual Basic для приложений интерпретирует их как переменную.

Как сослаться на объединенные ячейки с помощью свойства Worksheet.Range

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

  • Макрос ведет себя не так, как вы ожидали.
  • Проблемы с сортировкой.

Я могу затронуть тему работы с объединенными ячейками в будущих уроках. На данный момент я объясню, как ссылаться на объединенные ячейки с помощью свойства Range. Это должно помочь вам избежать некоторых из наиболее распространенных ошибок при работе с объединенными ячейками.

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

  • Ссылаясь на весь диапазон объединенных ячеек.
  • Ссылаясь только на верхнюю левую ячейку объединенного диапазона.

Предположим, вы работаете с таблицей Excel, в которой объединены диапазоны ячеек от A1 до C5. Сюда входят ячейки A1, A2, A3, A4, A5, B1, B2, B3, B4, B5, C1, C2, C3, C4 и C5. В этом случае подходящий синтаксис может быть одним из следующих:

  • Если вы ссылаетесь на весь объединенный диапазон, «Диапазон (« A1: C5 ″) ». В этом случае полная ссылка — «Application.Workbooks (« Book1.xlsm »). Worksheets (« Sheet1 »). Range (« A1: C5 ″) ».
  • Если вы ссылаетесь только на верхнюю левую ячейку объединенного диапазона, «Диапазон (« A1 ″) ». Полная ссылка для этого метода — «Application.Workbooks (« Book1.xlsm »). Worksheets (« Sheet1 »). Range (« A1 ″) ».

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

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

  • Выполнить присвоение значения; и
  • Вернуть ошибку.

Как обратиться к объекту диапазона VBA с помощью ярлыков для свойства диапазона

Ссылки на объект Excel VBA Range с использованием свойства Range можно сделать короче с помощью квадратных скобок ([]).

Вы можете использовать этот ярлык следующим образом:

  • Не используйте ключевое слово «Диапазон».
  • Заключите соответствующие аргументы свойств в квадратные скобки ([]) вместо скобок и двойных кавычек («»).

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

Ярлык №1: обращение к отдельной ячейке

Вместо того, чтобы вводить «Диапазон (« Ячейка »)», как описано выше, введите «[Ячейка]».

Например, если вы ссылаетесь на ячейку A1, используйте «[A1]». Полная ссылка на ячейку A1 в Sheet1 Book1.xlsm выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). [A1] 

Ярлык № 2: ссылка на всю строку или столбец

В этом случае обычным синтаксисом является либо «Диапазон (« Номер_строки: Номер_строки »)», либо «Диапазон (« Буква_столбца: Буква_столбца »)». Я объясняю это выше.

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

  • Строка: «[Row_Number: Row_Number]».
  • Столбец: «[Column_Letter: Column_Letter]».

Например, если вы ссылаетесь на первую строку (строка 1) или первый столбец (столбец A) листа Excel, синтаксис выглядит следующим образом:

  • Ряд: «[1: 1]».
  • Колонка: «[A: A]».

И полные ссылки, предполагающие, что вы работаете с Sheet1 из Book1.xlsm, следующие:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1").[1: 1]
Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). [A: A] 
Ярлык № 3: обращение к диапазону смежных ячеек

Обычно для ссылки на диапазон ячеек используется синтаксис «Range (« Cell_Range »)». Если вы определяете полный диапазон с помощью оператора двоеточия (:), как я объяснял выше, вы обычно структурируете ссылку как «Диапазон (« Top_Left_Cell: Right_Bottom_Cell »)».

Вы можете сократить ссылку до диапазона смежных ячеек, используя следующие квадратные скобки: «[Top_Left_Cell: Right_Bottom_Cell]».

Например, чтобы сослаться на диапазон ячеек между ячейками A1 и B5 (A1, A2, A3, A4, A5, B1, B2, B3, B4 и B5), вы можете ввести «[A1: B5]». В качестве альтернативы, если вы используете полную ссылку и работаете с Sheet1 из Book1.xlsm, синтаксис будет следующим:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). [A1: B5] 

Ярлык № 4: обращение к диапазону несмежных ячеек

Этот случай довольно похож на предыдущий, в котором мы ссылались на ряд смежных ячеек.Однако, чтобы разделить разные области, вы используете оператор запятой (,), как объяснялось ранее. Другими словами, основным синтаксисом обычно является «Диапазон (« Диапазон_ячейки_1, Диапазон_ячейки _ #,… »)».

При использовании квадратных скобок приведенную выше ссылку можно упростить до «[Cell_Range_1, Cell_Range _ #,…]».

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

  • Ячейки от A1 до B5 (A1, A2, A3, A4, A5, B1, B2, B3, B4 и B5).
  • Ячейки с D1 по D5 (D1, D2, D3, D4 и D5).

Синтаксис ссылки в квадратных скобках: «[A1: B5, D1: D5]». Полный код ссылки выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). [A1: B5, D1: D5] 

Ярлык № 5: Ссылка на пересечение 2 диапазонов

Обычно синтаксис для ссылки на пересечение 2 диапазонов использует оператор пробела и имеет вид «Диапазон (« Cell_Range_1 Cell_Range_2 ″) ». При использовании квадратных скобок это становится «[Cell_Range_1 Cell_Range_2]».

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

  • Ячейки от B1 до B10 (B1, B2, B3, B4, B5, B6, B7, B8, B9 и B10).
  • Ячейки от A5 до C5 (A5, B5 и C5).

Вы можете создать ссылку, используя следующие квадратные скобки: «[B1: B10 A5: C5]». При работе с Sheet1 из Book1.xlsm полная ссылка:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1").[B1: B10 A5: C5] 

И это возвращает единственную ячейку, общую для обоих диапазонов: B5.

Ярлык № 6: обращение к именованному диапазону VBA

Как объяснялось выше, при обращении к диапазону VBA, имеющему имя, вы заменяете адрес диапазона соответствующим именем. Следовательно, основной синтаксис — «Диапазон (« Имя_диапазона »)».

При использовании квадратных скобок логика такая же. Следовательно, вы можете обратиться к именованному диапазону, набрав «[Range_Name]».

Например, при ссылке на диапазон VBA с именем «Excel_Tutorial_Example» ссылка может быть структурой как «[Excel_Tutorial_Example]». При использовании полной ссылки это выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). [Excel_Tutorial_Example] 

Как обратиться к объекту диапазона VBA с помощью свойства Cells

В Visual Basic для приложений нет объекта Cell.Существует свойство Worksheet.Cells и свойство Range.Cells. Вы можете использовать свойство Cells для возврата объекта Range, представляющего ячейки .

Основное различие между обоими свойствами ячеек связано с объектом, к которому применяется свойство:

  • При использовании свойства Worksheet.Cells вы применяете свойство к объекту Worksheet.
  • При использовании свойства Range.Cells это свойство применяется к объекту Range.

Это важно, потому что в зависимости от контекста свойства могут возвращать разные ячейки. Точнее, , применяя свойство Cells к объекту Range, вы ссылаетесь на ячейку по отношению к другому диапазону .

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

Поскольку основная логика обоих свойств (Worksheet.Cells и Range.Cells), я рассматриваю оба одновременно.

Существует несколько способов использования свойства Cells для ссылки на объект Range. Я объясню основные методы этого в следующих разделах.

Синтаксис свойства ячеек

Базовый синтаксис свойства Cells — «expression.Cells (Row_Number, Column_Number)» , где:

  • «выражение» — это переменная, представляющая объект VBA. Этот объект VBA может быть рабочим листом (в случае Worksheet.Cells) или диапазон (для свойства Range.Cells).
  • «Номер строки» и «Номер столбца» — это номера как строки, так и столбца.
    • В обоих случаях обычно используются числа.
    • При использовании этого синтаксиса вы также можете использовать букву для обозначения столбца. В этом случае заключите букву в двойные кавычки («»). За исключением кавычек («») (окружающих букву), вам не нужно использовать другие цитаты так же, как при использовании свойства Range.

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

Есть дополнительные возможные способы реализации свойства Cells. Однако они второстепенные, и я объясню их ниже.

Объект Range имеет свойство, называемое свойством Range.Item, которое я объясню ниже. Причина, по которой вы можете указать аргументы Row_Number и Column_Number сразу после ключевого слова Cells, заключается в том, что Range.Свойство Item является свойством по умолчанию для объекта Range . По той же причине, как объяснено выше, вы также можете использовать букву, заключенную в двойные кавычки («»), для ссылки на столбец. Если вы хотите понять взаимосвязь между свойством Range.Item и свойством Cells, обратитесь к соответствующему разделу ниже.

А пока давайте вернемся к некоторым диапазонам VBA, которые использовались в предыдущих примерах, и посмотрим, как ссылаться на них с помощью свойства Cells.

Как сослаться на отдельную ячейку с помощью свойства Worksheet.Cells

Самый простой вариант использования свойства Cells относится к отдельной ячейке.

Тот факт, что свойство Cells может использоваться (обычно) только для целей возврата диапазона из 1 ячейки , является одной из основных характеристик, отличающих Cells от свойства Range.

Фактически существует способ использовать свойство Cells для ссылки на более крупные диапазоны ячеек .Однако это включает в себя объединение свойств Range и Cells. Я объясню этот метод ниже.

Обращение к отдельной ячейке с помощью свойства Cells относительно просто. Например, если вы хотите сослаться на ячейку A1 в Sheet1 Book1.xlsm, полная ссылка в значительной степени соответствует тому, что вы ожидаете, учитывая базовый синтаксис, показанный в предыдущем разделе:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Cells (1, 1)
Application.Workbooks ("Book1.xlsm").Рабочие листы («Лист1»). Ячейки (1, «А») 

Однако есть второй способ создания ссылок на одну ячейку при использовании свойства Worksheet.Cells. Давайте посмотрим на это…

Альтернативный синтаксис для ссылки на отдельную ячейку с использованием свойства Worksheet.Cells

Синтаксис свойства Cells, который я описал выше, вероятно, наиболее часто используется на практике.

Следующая альтернатива практически аналогична синтаксису, который я объяснил выше.Он также начинается с «expression.Cells». Разница заключается в аргументах, заключенных в круглые скобки.

Альтернативный синтаксис: «expression.Cells (Cell_Index)». В этом конкретном случае есть только 1 аргумент: индекс соответствующей ячейки .

Итак, главный вопрос: , как Visual Basic для приложений определяет индекс ячейки?

Для этих целей каждой ячейке присвоен номер. Ячейки пронумерованы слева направо и сверху вниз .Другими словами:

  • Нумерация начинается с первой строки:
    • Ячейке A1 присвоен номер 1.
    • Ячейке B1 присвоен номер 2.
    • Ячейке C1 присвоен номер 3.
    • Процесс продолжается с каждой из ячеек подпоследовательности до…
    • Ячейке XFD1 (последней ячейке в первой строке) присваивается номер 16 384.
  • После того, как всем ячейкам в первой строке были присвоены номера, процесс продолжается со второй строкой:
    • Ячейке A2 присвоен номер 16 385.
    • Ячейке B2 присвоен номер 16 386.
    • Ячейке C2 присвоен номер 16 387.
    • Присвоение номеров продолжается до…
    • Ячейке XFD2 (последней ячейке во второй строке) присваивается номер 32 768.
  • Процесс продолжается с третьей строкой.
  • Затем четвертый ряд.
  • И так до…
  • Доходит до строки 1 048 576.
  • А…
  • Последней ячейке на листе Excel (ячейка XFD1048676) присваивается номер 17 179 869 184.

Следующий снимок экрана дает вам представление о том, как происходит присвоение номера:

Например, если вы хотите обратиться к ячейке A2, используя этот синтаксис, подходящей ссылкой будет «Ячейки (16385)». Полная ссылка на ячейку A2 в Sheet1 Book1.xlsm выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Cells (16385) 

Первые два примера свойства Cells показывают, как оно применяется к объекту Worksheet.Однако вы также можете использовать этот синтаксис для применения свойства к объекту Range. Это позволяет вам ссылаться на ячейку относительно другого диапазона.

Как сослаться на отдельную ячейку относительно диапазона, используя свойство Range.Cells

Предположим, что текущий выбор — это диапазон, охватывающий ячейки от C3 до D5 (ячейки C3, C4, C5, D3, D4 и D5) активного листа Excel. Вы уже знаете, что это объект Range.

Мы можем использовать свойство Selection, чтобы создать следующую ссылку:

 
 Выбор.Ячейки (1, 1) 

Эта ссылка возвращает саму ячейку C3.

Это отличается от того, что было возвращено в предыдущем примере (полная ссылка) (ячейка A1).

Причина различного поведения, показанного в приведенных выше примерах, заключается в том, что свойство Range ведет себя относительно объекта, к которому оно применяется (рабочий лист или диапазон) . В случае диапазонов ячеек (например, в примере выше) свойство Range ведет себя по отношению к левому верхнему углу диапазона .Логика та же, что объясняет различное поведение при применении свойства Range к объекту Worksheet или объекту Range.

Точно так же вы можете создавать ссылки на одну ячейку по отношению к диапазону, используя альтернативный синтаксис свойства Cells, который я описал выше. Давайте посмотрим на этот случай:

Альтернативный синтаксис для ссылки на отдельную ячейку относительно диапазона с использованием свойства Range.Cells

Напомним, что альтернативный синтаксис — «выражение.Ячейки (Cell_Index) ».

В таком случае:

  • Каждой ячейке в диапазоне присваивается номер.
  • Назначение выполняется по той же схеме, что и для всего рабочего листа, описанной выше. Слева направо и сверху вниз.

Например, предположим, что вы работаете с диапазоном ячеек от A1 до B10 и хотите выбрать ячейку A5.

В данном случае ссылка — «Диапазон (« A1: B10 ″). Ячейки (9) ».На следующем снимке экрана показано, как номера Cell_Index назначаются ячейкам в соответствующем диапазоне:

Полная ссылка при работе с Sheet1 из Book1.xlsm выглядит следующим образом:

 
 Приложение.Рабочие книги ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: B10"). Ячейки (9) 

Интересным аспектом применения этого синтаксиса свойства Cells к объекту Range является то, что аргумент для свойства Cells не ограничен количеством ячеек в указанном диапазоне .Если вы используете число, превышающее количество ячеек в соответствующем диапазоне, Visual Basic для приложений продолжит подсчет, как если бы диапазон был выше (простираясь вниз), чем он на самом деле. Другими словами: объект Range, возвращаемый свойством Cells, не обязательно должен находиться внутри исходного / исходного диапазона ячеек.

В случае диапазона, описанного в приведенном выше примере (A1: B10), присвоение Cell_Index продолжается, как показано на следующем снимке экрана:

Например, диапазон ячеек от A1 до B10 содержит 20 ячеек.Предположим, вы вводите «21» в качестве аргумента для свойства Cells. В результате получается ссылка «Диапазон (« A1: B10 ″). Ячейки (21) ». Полный код ссылки:

 
 Приложение.Рабочие книги ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: B10"). Ячейки (21) 

Этот оператор ссылается на ячейку A11, которая находится за пределами первоначально указанного диапазона (A1: B10).

Как сослаться на диапазон ячеек с помощью свойств диапазона и ячеек

Как и предполагалось выше, вы можете комбинировать свойства Range и Cells, чтобы ссылаться на диапазоны ячеек.Возможно, самый простой способ сделать это — использовать свойство Cells в качестве параметра свойства Range.

Для этих целей используйте следующий синтаксис : «Диапазон (Ячейки (Номер_строки_Первая_ячейка, Номер_строка_Первая_ячейка), Ячейки (Номер_строки_Последняя_ячейка, Номер_строка_Последняя_Ячейка))»

Например, если вы хотите сослаться на диапазон, охватывающий ячейки от A1 до B5 (A1, A2, A3, A4, A5, B1, B2, B3, B4 и B5) в Sheet1 Book1.xlsm, используя свойство Cells, вы Тип «Диапазон» (Ячейки (1, 1), Ячейки (5, 2)).Соответствующая полностью квалифицированная ссылка выглядит следующим образом:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range (Cells (1, 1), Cells (5, 2)) 

Этот метод полезен (например), когда вы используете переменные для определения параметров свойства Cells. Это может произойти, например, при зацикливании.

Как сослаться на все ячейки на листе с помощью свойства Worksheet.Cells

Это, вероятно, самый простой, но наиболее ограниченный способ реализации свойства Cells.Оператор «expression.Cells» возвращает абсолютно все ячейки в соответствующем рабочем листе Excel .

Например, следующий оператор возвращает абсолютно все ячейки Sheet1 в Book1.xlsm:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Cells 

Этот метод не позволяет ссылаться на одну ячейку.

Почему вы должны научиться использовать свойство Cells для ссылки на объект диапазона Excel VBA

Использование свойства Cells может показаться немного более сложным способом ссылки на объект Excel VBA Range, чем использование свойства Range.Однако есть несколько сценариев, в которых использование свойства Cells может быть более подходящим.

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

Свойство Cells и возможность использовать переменные в качестве аргументов полезны при выполнении определенных действий с Visual Basic для приложений.Типичным случаем такой активности является зацикливание (тема, которую я рассматриваю здесь).

Как обратиться к объекту диапазона VBA с помощью свойства Range.Offset

Как и ранее описанные свойства, свойство Range.Offset также возвращает объект Range.

Однако в случае свойства Range.Offset возвращаемый объект Range — это то, что находится в определенном количестве строк и столбцов из указанного диапазона .

Другими словами, возвращаемый объект Range определяется следующими факторами:

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

Синтаксис свойства Range.Offset отражает эти 3 элемента. Этот синтаксис : «expression.Offset (Row_Offset, Column_Offset)» , где:

  • «выражение» — это переменная, представляющая объект диапазона VBA.
  • «Row_Offset» — это количество строк, на которое должен быть смещен диапазон. Это значение может быть положительным (смещение выполняется вниз) или отрицательным (смещение выполняется вверх).
  • «Column_Offset» — это количество столбцов, на которое должен быть смещен диапазон. В случае положительных значений смещение производится вправо. При использовании отрицательных значений смещение выполняется влево.

Оба аргумента Row_Offset и Column_Offset несут смещение от верхней левой ячейки объекта диапазона VBA, представленного выражением.

Способ работы свойства Offset означает, что его можно применить только к объекту Range . Другими словами, рабочего листа нет.Смещение собственности. Это означает, что это свойство является отличной альтернативой для целей ссылки на конкретную ячейку по отношению к диапазону без использования более сложных методов, которые я объяснил выше, а именно применения свойств Range или Cells к объекту Range.

Давайте рассмотрим несколько примеров использования свойства Range.Offset для ссылки на объект Range VBA:

Как сослаться на отдельную ячейку с помощью свойства Range.Offset

В простейшем случае можно использовать Range.Смещение для ссылки на отдельную ячейку:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1"). Offset (RowOffset: = 1, ColumnOffset: = 1) 

Вы можете упростить этот оператор, опустив ключевые слова «RowOffset» и «ColumnOffset». В результате получается следующая ссылка:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1"). Offset (1, 1) 

В этом конкретном случае Visual Basic для приложений возвращает ячейку, которая находится на 1 строку ниже и 1 столбец справа от ячейки A1.Другими словами, базовый диапазон — это ячейка A1.

И оттуда VBA перемещает на 1 строку вниз и на 1 столбец вправо. Таким образом, приведенная выше ссылка относится к ячейке B2.

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

Например, следующие инструкции относятся к ячейке на одну строку ниже ячейки A1.Другими словами, это относится к ячейке A2:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1"). Offset (RowOffset: = 1)
Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1"). Offset (1) 

Точно так же следующие инструкции относятся к ячейке B1, которая является одним столбцом справа от ячейки A1:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1"). Offset (ColumnOffset: = 1)
Application.Workbooks ("Книга1.xlsm "). Таблицы (" Лист1 "). Диапазон (" A1 "). Смещение (, 1) 

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

 
 ActiveCell.Offset (1, 1) 

В этом случае вместо использования «Range» я использую свойство Application.ActiveCell. Это свойство возвращает объект Range, представляющий текущую активную ячейку.

Таким образом, Visual Basic для приложений возвращает ячейку, которая находится на 1 строку ниже и 1 столбец справа от текущей активной ячейки. Например, если текущая активная ячейка — A1, приведенный выше оператор возвращает ячейку B2.

Свойство Range.Offset генерирует ошибку, если оно используется для попытки вернуть несуществующую ячейку . Это может произойти, например, если текущая активная ячейка — A1 и вы используете следующую ссылку:

 
 ActiveCell.Смещение (-1, -1) 

Приведенный выше оператор просит Visual Basic для приложений вернуть ячейку, которая находится на 1 строку выше и 1 столбец слева от ячейки A1. Поскольку такой ячейки не существует, генерируется ошибка.

Как сослаться на диапазон ячеек с помощью свойства Range.Offset

Вы уже знаете различные операторы, которые можно использовать для ссылки на диапазон ячеек с помощью Visual Basic для приложений. Особенно важен оператор двоеточия (:), который можно использовать для настройки массивов и создания ссылок на диапазоны смежных ячеек.

Если вы хотите, чтобы ссылался на диапазон ячеек с помощью свойства Range.Offset, вы можете просто использовать тот же оператор двоеточия, чтобы определить диапазон ячеек, который является основанием смещения .

Логика смещения остается прежней.

Взгляните, например, на следующую ссылку на объект VBA Range:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1: B5"). Offset (3, 3) 

Этот отчет выглядит следующим образом:

  • Устанавливается как базовый диапазон, содержащий ячейки от A1 до B5 (A1, A2, A3, A4, A5, B1, B2, B3, B4 и B5).
  • Перемещает диапазон на 3 ячейки вправо и на 3 ячейки вниз.

Как следствие вышесказанного, инструкция возвращает диапазон от ячеек D4 до E8 (D4, D5, D6, D7, D8, E4, E5, E6, E7 и E8).

Почему вам следует научиться использовать свойство Range.Offset для ссылки на объект диапазона Excel VBA

Свойство Range.Offset (обычно) наиболее полезно , когда:

  • Вы работаете с переменными вместо фактических чисел в качестве аргументов; и
  • В циклических процедурах .

Свойство Range.Offset также обычно используется средством записи макросов при использовании относительных ссылок при записи макроса . Таким образом, вы можете ожидать постоянно сталкиваться с этим типом ссылочной структуры при работе с макросами и Visual Basic для приложений.

Как обратиться к объекту диапазона VBA с помощью свойства Range.Item

По причинам, которые я объясню в конце этого раздела, вы не можете в конечном итоге слишком часто использовать свойство Range.Item в своей повседневной работе с Excel .Однако вам все равно может понадобиться время от времени использовать это свойство. Кроме того, , имеющий хорошее представление о свойстве Range.Item, может помочь лучше понять свойство Cells, которое я описал выше, и понять его синтаксис.

Как и некоторые другие свойства, обсуждаемые в этом руководстве по VBA, свойство Range.Item возвращает объект. Объект — это диапазон.

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

Синтаксис свойства Range.Item очень похож на синтаксис других свойств, описанных в этом руководстве по VBA: «expression.Item (Row_Index, Column_Index)» . В этом случае «выражение» — это переменная, представляющая объект Range.

Обратите внимание, однако, что в случае свойства Range.Item я имею в виду «Row_Index» и «Column_Index». В случае большинства других свойств, рассмотренных в этом руководстве по VBA, аргументы ссылались либо на числа (например, «Row_Number»), либо на буквы (например, «Column_Letter»).

Единственный другой раз, когда я использую слово index для описания аргументов свойства, — это когда я объясняю альтернативный синтаксис для ссылки на одну ячейку с помощью свойства Cells. Причина, по которой свойство Range.Item использует индекс для идентификации как строки, так и столбца, заключается в том, что поведение аргумента Row_Index очень похоже на поведение аргумента Cell_Index в этом случае использования свойства Cells.

Давайте подробнее рассмотрим этот аргумент Row_Index.Основные характеристики этого аргумента следующие:

  • Обязательно.
  • Это должен быть номер.
  • Он определяет ячейку, к которой вы обращаетесь, в соответствующем диапазоне. Для этих целей есть 2 варианта.
    • Если вы используете только аргумент Row_Index, ячеек пронумерованы слева направо и сверху вниз . Я подробно объяснил, как это работает выше.
    • Если вы используете и Row_Index, и Column_Index, Row_Index определяет строку ячейки, к которой вы обращаетесь, в пределах применимого диапазона.

Другой аргумент свойства Range.Item (Column_Index) ведет себя несколько иначе . Ниже приведены его основные характеристики:

  • Необязательно.
  • Это может быть число или строка. Вследствие этой характеристики вы можете использовать как номер столбца, так и букву столбца (заключенную в кавычки) для ссылки на конкретный столбец. Я покажу вам, как это работает, ниже.
  • Это определяет столбец ячейки, к которой вы обращаетесь в соответствующем диапазоне.

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

Я объясняю (выше), как при применении к объекту Range свойство Cells не ограничивается количеством ячеек в указанном диапазоне. Другими словами, вы, , можете использовать свойство Cells для ссылки на ячейки за пределами этого диапазона . У то же самое происходит с Range.Объект собственность.

Прочитав о других свойствах выше, вы, вероятно, имеете хорошее представление о том, что делает свойство Range.Item. Тем не менее, давайте взглянем на пару примеров.

Например, все следующие операторы возвращают ячейку A1 листа Sheet1 в Book1.xlsm:

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1: D10"). Cells.Item (1)
Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1: D10"). Cells.Item (1, 1)
Заявление.Рабочие книги ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: D10"). Cells.Item (1, "A") 

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

 
 Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1: D10"). Cells.Item (30)
Application.Workbooks ("Book1.xlsm"). Worksheets ("Sheet1"). Range ("A1: D10"). Cells.Item (8, 2)
Application.Workbooks ("Book1.xlsm"). Рабочие листы ("Sheet1"). Range ("A1: D10").Cells.Item (8, «B») 

Отчасти важность свойства Range.Item заключается в том, что оно позволяет ссылаться на конкретную ячейку по отношению к диапазону .

Однако, что, возможно, даже более важно для целей этого руководства по VBA, свойство Item является свойством по умолчанию для объекта Range. Обычно можно опустить ключевое слово Item перед указанием аргументов Row_Index и Column_Index . В случае последнего примера, приведенного выше, это приводит к следующим сокращенным ссылкам:

 
 Приложение.Рабочие книги ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: D10"). Ячейки (30)
Application.Workbooks ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: D10"). Ячейки (8, 2)
Приложение.Рабочие книги ("Book1.xlsm"). Рабочие листы ("Sheet1"). Диапазон ("A1: D10"). Ячейки (8, "B") 

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

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

Однако теперь вы знаете, что, если это необходимо для ваших целей, вы можете использовать свойство Range.Item для ссылки на объекты Excel VBA Range.

Кроме того, хорошее знание свойства Range.Item полезно, в частности, для следующих целей:

  • Лучшее понимание свойства Cells.
  • Создание лучших ссылок на объекты Excel VBA Range с помощью свойства Cells.

Заключение

Объект Range — один из наиболее важных и часто используемых объектов Excel VBA.

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

Это руководство по VBA представляет собой краткое введение в тему объекта Excel VBA Range. Возможно, что более важно, в этом посте объясняются и показаны некоторые из наиболее распространенных методов создания соответствующих ссылок на объект Range.

Теперь, когда вы прочитали этот пост, вы, вероятно, хорошо понимаете объект Excel VBA Range и вас не смущают различные альтернативы, которые вы можете использовать для ссылки на него. В частности, вы, вероятно, теперь являетесь экспертом в том, что касается создания ссылок на объекты Range с использованием любого из следующих свойств:

  • Диапазон.
  • Ячейки.
  • Смещение.
  • Товар.

Есть еще несколько других способов ссылаться на объекты Excel VBA Range и манипулировать ими.Некоторые из них — это метод Application.Union и свойство Range.Areas.

ссылок VBA — добавить и удалить

В этом модуле — как программно:

  1. Список доступных ссылок VBA
  2. Добавить ссылок VBA в проект
  3. Удалить ссылок VBA из проекта

0. Справочные документы VBA

Справочный список VBA (рис. 1) доступен через последовательность меню VBE.Список доступных ссылок отображает каждый элемент ссылки по его свойству description в порядке приоритета.

Рис. 1. Ссылки — VBAProject — с девятью выбранными ссылками, идентифицированными свойством описания и отображаемым всплывающим окном пути.

Ссылки также являются частью раскрывающегося списка библиотек в обозревателе объектов (рисунок 2). Каждый выбранный элемент списка ссылок отображается своим свойством name в алфавитном порядке в обозревателе объектов .

Рис. 2: Ссылки — Библиотека обозревателя объектов — с девятью ссылками, перечисленными в алфавитном порядке свойства Имя

1. Ссылки VBA — Список

Код 1 использует объект ссылки и связанную с ним коллекцию ссылок для печати списка доступные ссылки. Для этого кода требуется справочник Microsoft Visual Basic for Applications Extensibility 5.3 .

Код 1: макрос xlfVBEListReferences распечатать список ссылок в немедленное окно

Sub xlfVBEListReferences ()
'Требуются ссылки :: Microsoft Visual Basic для расширения приложений 5.3
'C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ VBA \ VBA6 \ VBE6EXT.OLB
Dim oRef как VBIDE.Reference 'Item
Dim oRefs как VBIDE.Сборник ссылок
Dim i как целое число

Установите oRefs = Application.VBE.ActiveVBProject.References

    Debug.Print "Время печати:" & Время & ":: Элемент - Имя и описание"
        Для каждого oRef в oRefs
            я = я + 1
            Debug.Print "Item" & i, oRef.Name, oRef.Description
        Следующий oRef
    Debug.Print vbNewLine

    я = 0
    Отлаживать.Распечатать "Время печати:" & Время & ":: Элемент - Полный путь"
        Для каждого oRef в oRefs
            я = я + 1
            Debug.Print "Item" & i, oRef.FullPath
        Следующий oRef
    Debug.Print vbNewLine

    я = 0
    'Перечислите глобальный уникальный идентификатор (GUID) для каждой библиотеки, на которую имеется ссылка в текущем проекте.
    Debug.Print "Время печати:" & Время & ":: Элемент - GUID"
        Для каждого oRef в oRefs
            я = я + 1
            Debug.Print "Item" & i, oRef.GUID
        Следующий oRef
    Отлаживать.Печать vbNewLine

Конец подписки
 

О Коде 1

  1. Строка 14: Debug.Print — для каждой ссылки напечатайте номер элемента, имя , и Описание свойств в окне Immediate Window
  2. Строка 22: Debug.Print — для каждой ссылки напечатайте номер элемента и свойство FullPath в окне Immediate Window
  3. Строка 31: Отладка.Распечатайте — для каждой ссылки распечатайте номер позиции, свойство GUID (глобальный уникальный идентификатор) в окне немедленного действия
  4. См. Рисунок 3 для деталей окна немедленного выполнения

Рис. 3: Окно непосредственного доступа — с отладкой. Печать текста для свойств имени и описания, полного пути и GUID.

Справочные объекты, элементы 1 и 9, развернуты в представлении Окно локальных переменных на рис. 4 как объект oRefs из код 1.

Рис. 4: Окно локальных переменных — элементы oRef — расширенный вид для элементов 1 и 9

2.Ссылки VBA — Добавить

Элементы ссылки могут быть созданы в коллекции ссылок с помощью методов AddFromFile (код 2a) или AddFromGuid (код 2b).

Код 2a: макрос xlfVBEAddReferences добавить объект ссылки в коллекцию ссылок

Sub xlfVBEAddReferences ()
Dim oRefs как ссылки
Установите oRefs = Application.VBE.ActiveVBProject.References

    При ошибке GoTo OnError
    oRefs.AddFromFile "C: \ Windows \ System32 \ msxml6.dll "

OnError:
Конец подписки

 

Код 2b: макрос xlfVBEAddReferencesGUID добавить объект ссылки в коллекцию ссылок


Sub xlfVBEAddReferencesGUID ()
Dim oRefs как ссылки
Установите oRefs = Application.VBE.ActiveVBProject.References

    При ошибке GoTo OnError
        'Синтаксис: AddFromGuid (Guid, Major, Minor)
        'Основной номер версии справки.
        'Дополнительный номер версии справки.
        'Microsoft XML, v6.0 :: Major - 6, Minor - 0
    oRefs.AddFromGuid "{F5078F18-C551-11D3-89B9-0000F81FE221}", 6, 0

OnError:
Конец подписки
 

3. Ссылки VBA — Удалить

Чтобы удалить элемент из коллекции, выполните цикл с помощью For Each … Next и определите конкретные объекты по имени (код 3a) или Описание (код 3b) затем Удалить.

Код 3a: макрос xlfVBERemoveReference1 — справочное имя версии

Sub xlfVBERemoveReference1 ()
Dim oRef как ссылка
Dim oRefs как ссылки
Установите oRefs = Application.VBE.ActiveVBProject.References

    Для каждого oRef в oRefs
        Если oRef.Name = "MSXML2" Тогда
            oRefs.Remove oRef
            Выход для
        Конец, если
    Следующий oRef

Конец подписки

 

Код 3b: макрос xlfVBERemoveReference2 — справочная версия описания


Sub xlfVBERemoveReference2 ()
Dim oRef как ссылка
Dim oRefs как ссылки
Установите oRefs = Application.VBE.ActiveVBProject.References

    Для каждого oRef в oRefs
        Если oRef.Description = "Microsoft XML, v6.0 "Тогда
            oRefs.Remove oRef
            Выход для
        Конец, если
    Следующий oRef

Конец подписки