Vba excel vba vbnewline отличия

Обновлено: 06.07.2024

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

Различия между Windows и UNIX

Различия между Windows и UNIX В Windows и UNIX выбраны различные стратегии. Большинство поставщиков UNIX-систем реализуют модель LP64, в которой размер как длинного целочисленного, так и указательного типов данных составляет 64 бита. Такую модель иногда называют моделью "I32, LP64", чтобы

Visual Basic 6.0

Visual Basic 6.0 В Visual Basic 6.0 в отличие от пятой версии окна Code и Object появляются в нормальном, не в раскрытом виде. И приходится при каждом запуске VB6 раскрывать эти окна. Можно заставить автоматически раскрывать эти окна при каждом запуске. Создайте в соответствующем разделе

Visual Basic

Delphi и Visual Basic

Delphi и Visual Basic 1. Есть ли в Delphi эквивалент массива элементов управления из Visual Basic? Hет. Компоненты Delphi не имеют свойства Index, подобное VB. Однако, имеются три основные причины, почему вы хотите использовать их в VB, и для каждой из них есть решение в Delphi. Причина 1. Вы хотите

Различия между версиями 2.0 и 2.2

Различия между версиями 2.0 и 2.2 Я не знаю, что все ядро достаточно хорошо документирует все изменения. В ходе преобразования примеров (или фактически, адаптации изменений Еммануела Папиракиса) я натолкнулся на следующие различия. Я привожу их все здесь вместе, чтобы помочь

3. Переменные Visual Basic

3. Переменные Visual Basic В Visual Basic переменные накапливают информацию (значения). При их применении Visual Basic занимают область в памяти компьютера, которая предназначена для сохранения этой информации. Имена переменных, составленные из символов, могут иметь длину в 255 символов.

Что визуального в Visual Basic для приложений?

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

VBA против Visual Basic

VBA против Visual Basic Помимо того, что VBA не позволяет вам создавать отдельные приложения, одно из основных отличий состоит в том, что программы, написанные на VBA, работают медленнее, чем программы, написанные на Visual

Почему VBA обычно медленнее, чем Visual Basic

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

Вызов редактора Visual Basic

Вызов редактора Visual Basic Редактор Visual Basic служит командным центром для работы в VBA. В нем вы должны находиться при разработке VBA-форм, создании VBA-кода, тестировании и отладке VBA программ. Экспертом по использованию редактора Visual Basic вы станете после прочтения главы 5, а пока

Краткое знакомство с редактором Visual Basic

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

9.3. Редактор Visual Basic

9.3. Редактор Visual Basic После записи рассмотренного выше макроса к шаблону Normal добавился следующий текст макроса: Sub Arial_10_bold() “ “ Arial_10_bold Macro “ Arial 10 Полужирный “ With Selection.Font .Name = "Arial" .Size = 10 .Bold = True .Italic = False .Underline = wdUnderlineNone .UnderlineColor = wdColorAutomatic .StrikeThrough = False .DoubleStrikeThrough = False .Outline =

Подход Visual Basic 6.0

Подход Visual Basic 6.0 Благодаря искреннему желанию насладиться более простой жизнью, многие программисты ушли от "мира каркасов" приложений на базе C(++) к более дружественным языкам, таким, как, например, Visual Basic 6.0 (VB6). Язык VB6 стал популярным благодаря тому, что он дает

Различия между приложением и сеансом

Отличия eVB и Visual Basic для. NET

2.4.2. Генерация кода в Visual Basic

2.4.2. Генерация кода в Visual Basic ERwin поддерживает генерацию кода для MS Visual Basic версий 4.0 и 5.0. В качестве источника информации при генерации форм служит модель ERwin. Использование ERwin позволяет одновременно описывать как клиентскую часть (объекты, отображающие данные на экране),


Enum сокращенно обозначается как перечисление. Это процесс, в котором мы упоминаем что-то один за другим. Точно так же у нас есть перечисления в каждом языке программирования, будь то JAVA, C или Excel VBA. В VBA у нас есть некоторые встроенные перечисления, которые начинаются с VB, например, VBnewLine используется для вставки новой строки. Это перечисление. В Excel VBA мы также можем создавать наши собственные нумерации.

Синтаксис Enum в Excel VBA

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

Важно помнить, что значения, указанные в ENUM, должны иметь конкретные значения, но если мы не предоставляем никаких значений, VBA автоматически присваивает первому значению enum значение 0, а следующему - 1 и т. Д.

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

Теперь в приведенном выше примере перечисления я назначил значения только для Avenger, поэтому по умолчанию pulsar равен нулю, а dominar равен 5, так как предыдущее значение списка было 4. Именно так значения присваиваются значениям ENUM.

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

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


На приведенном выше снимке экрана видно, что существует множество перечислений, начиная с A. Это встроенные перечисления VBA.

Теперь давайте научимся создавать пользовательские перечисления в VBA на нескольких примерах.

Примечание. Чтобы использовать Excel VBA, убедитесь, что вкладка разработчика включена на вкладке «Файлы» и в разделе «Параметры».

Как сделать пользовательские перечисления в Excel VBA

Мы научимся создавать собственные перечисления (Enum) на нескольких примерах в Excel VBA.

Вы можете скачать этот шаблон VBA Enum Excel здесь - Шаблон VBA Enum Excel

Excel VBA Enum - Пример № 1

Выполните следующие шаги, чтобы использовать VBA Enum:

Шаг 1: На вкладке разработчика нажмите Visual Basic, чтобы открыть VB Editor.


Шаг 2: Вставьте новый модуль с вкладки «Вставка» в VB Editor.


Шаг 3: Объявите функцию Enum с именем enum.

Код:


Шаг 4: Объявите значения перечисления следующим образом:

Код:


Шаг 5: Теперь объявите подфункцию ниже функции enum для использования enum.

Код:


Код:


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

Код:


Шаг 8: Выберите любое из значений приветствия следующим образом.

Код:


Шаг 9: Когда закончите, скомпилируйте и запустите полный код, нажав на кнопку воспроизведения, расположенную чуть ниже строки меню. Когда мы запускаем код, мы видим следующий результат.

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

Excel VBA Enum - Пример № 2

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

У нас есть какой-то предварительный расчет на листе 1 следующим образом.


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

Для этого выполните следующие действия, чтобы использовать VBA Enum:

Шаг 1: Перейдите на вкладку разработчика, чтобы щелкнуть Visual Basic, чтобы открыть VB Editor.


Шаг 2: Вставьте новый модуль с вкладки «Вставка» в VB Editor.


Шаг 3: Объявите функцию enum как мотоциклы.

Код:


Шаг 4: Объявите список перечислений следующим образом:

Код:


Шаг 5: Теперь объявите подфункцию для использования этих перечислений.

Код:


Шаг 6: Мы знаем, что для использования свойств листа 1 нам нужно сначала активировать лист с помощью следующего кода.

Код:


Шаг 7: Теперь присвойте значения ячейке, используя перечисление следующим образом:

Код:


Шаг 8: Запустите приведенный выше код с помощью кнопки запуска или нажмите F5 и просмотрите следующий результат на листе 1.

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

То, что нужно запомнить

  • ENUM - это числовая переменная, которая может быть создана пользователем, но также встроена в VBA.
  • Если мы не присваиваем значения ENUM, VBA автоматически присваивает им значения.
  • Чтобы использовать перечисления VBA в нашем коде, мы ссылаемся на них по имени enum.

Рекомендуемые статьи

Это был путеводитель по VBA Enum. Здесь мы обсудили, как сделать пользовательские перечисления в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

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

  • сообщить пользователю о выполнении кода;
  • получить от пользователя подтверждение на выполнение того или иного действия;
  • запросить какие-то данные(число, текст для поиска, диапазон поиска и т.п.).

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

Из основных можно выделить три типа:
MsgBox - окно информирования пользователя с возможностью запроса действия (Да, Нет, Отмена и т.п.);
InputBox - окно запроса текстовой информации от пользователя (текст для поиска, дата, число и т.п.);
Application.InputBox - чуть более расширенная версия InputBox с возможностью указания не только текста и чисел, но и выделения диапазона ячеек (например для указания ячеек, в которых осуществлять поиск значения или которые необходимо закрасить).

MsgBox "Обработка завершена"

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

Константы Buttons могут быть объединены между собой. Ниже приведен код, который показывает диалоговое окно с возможностью выбора одного из трех вариантов - Прервать, Повтор, Пропустить:

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

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

Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", 2 + 32 + 512) Select Case lRetVal Case 3 'vbAbort Exit Sub 'выходим из процедуры Case 4 'vbRetry GoTo Retry_ 'переход на метку Retry_ Case 5 'vbIgnore End Select End Sub

Нетрудно после этого предположить, что можно указать просто сумму данных чисел:

MsgBox "Обработка завершена", 546

Доступные константы значений возврата:

Константа Значение Нажатая кнопка
vboK 1 ОК
vbCancel 2 Отмена
vbAbort 3 Прервать
vbRetry 4 Повтор
vblgnore 5 Пропустить
vbYes 6 Да
vbNo 7 Нет

Title - указывается текст заголовка окна. Например, можно указать либо что это ошибка, либо имя своего приложения:

MsgBox "Обработка завершена", vbOKOnly, "Мое приложение"

HelpFile - указывается имя файла-справки в формате .HLP. Применяется, если параметр Buttons указан как vbMsgBoxHelpButton. Файл справки должен существовать.
Context - целое число. Указывается индекс страницы файла-справки, которую необходимо открыть. Указывается только если указан параметр HelpFile.

Небольшой практический пример применения простого диалогового окна MsgBox.
Цель процедуры(макроса): очистить все ячейки листа.
Согласитесь, что неплохо бы перед этим запросить у пользователя решение - он согласен с этим и это является обдуманным решением или случайностью?

Так же на странице Полезные программы для Excel и VBA можно найти программу MsgBox Generator, которая просто и наглядно формирует коды показа MsgBox.

MsgBox, автоматически закрываемый по истечении указанного времени
Диалог MsgBox удобен, если надо проинформировать пользователя о каких-то событиях или предоставить ему выбор Да или Нет. Но в тоже время есть один недостаток: этот диалог не закроется, пока пользователь не нажмет хоть какую-то кнопку. Но бывает необходимо просто проинформировать и закрыть окно независимо от реакции пользователя. Показали окно, подождали секунд 5-7 и даже если пользователь ничего не нажал - закрыли окно и продолжили выполнение кода. Стандартно такой опции в MsgBox нет. Однако можно использовать функции API(это встроенные в ОС Windows функции, которые можно вызывать из любого языка программирования).
Код такого диалога:

Основную роль здесь играет строка:

Declare Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long

ДИАЛОГ ВВОДА ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЕМ - INPUTBOX
InputBox позволяет запросить от пользователя любую текстовую информацию.

InputBox Promt, [Title], [DefaultValue], [XPos], [YPos], [HelpFile], [Context]
Так же как и с MsgBox обязательным аргументом для указания является только Promt - это тот текст, который будет расположен непосредственно на самой форме диалога. Как правило это пояснение, что должен ввести пользователь.

Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите значение для поиска:", "Запрос данных", "") If vRetVal = "" Then Exit Sub 'завершаем процедуру, если строка пуста

Title - текст, отображаемый в заголовке окна. В приведенном выше примере это "Запрос данных".
DefaultValue - значение, которое будет показано в поле ввода до указания значения пользователем. Как правило оно указывается в случаях, когда требуемое значение изменяется редко по запросу пользователя, но возможность такую оставить все же требуется. Пример: необходимо по нажатию кнопки удалять всегда столбец 5. Но иногда столбец в отчете смещается и требуется запрашивать у пользователя реальный номер столбца:

Sub DelCols() Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", 5) 'используем Val для преобразования текста vRetVal в число 'Val() преобразует число как текст в число. 'Если указан текст(например "третий") - он будет преобразован в 0 vRetVal = Val(vRetVal) If Val(vRetVal) = 0 Then MsgBox "Номер столбца должен быть целым числом больше нуля!", vbCritical, "DelCols" Exit Sub End If Columns(vRetVal).Delete End Sub

Важно знать: InputBox всегда возвращает только текст. Даже если указать - 5 - он вернет "5". В некоторых случаях это может привести к ошибке типов данных, поэтому я привел выше один из примеров преобразования типов данных к нужному.
Так же по прошествии какого-то времени появится вопрос, как отследить нажатие кнопки Отмена. Ведь ориентир на vRetVal = "" не всегда верен, иногда надо принять пустое значение(в случаях, скажем, замены значений) и отследить именно нажатие Отмена. Сделать это можно так:

vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", "") If StrPtr(vRetVal) = 0 Then MsgBox "Нажата кнопка Отмена. Процедура прервана", vbCritical, "DelCols" Exit Sub End If

Больше всего вопросов здесь явно вызовет StrPtr . Эта специальная функция VBA, которая указывает, что переданы некие строковые данные. Если никаких данных не передавалось(а в случае с нажатием кнопки Отмена так и есть) указатель вернет 0. Если какие-то данные были переданы или нажата кнопка Ок(автоматом будет передана строка нулевой длины) - указатель StrPtr вернет значение отличное от нуля.

XPos - положение окна InputBox в твипах по горизонтали относительно левого края экрана. Следует учитывать, что именно относительно экрана, а не окна Excel.
YPos - положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile - указывается имя файла-справки в формате .HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна - Help, которая и отвечает за вызов справки.
Context - целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.

В дополнение приведу классический пример применения InputBox - выполнение процедуры только после введения пароля:

Sub ClearAllCells() Dim vRetVal vRetVal = InputBox("Введите пароль:", "Авторизация", "") If StrPtr(vRetVal) = 0 Then 'Нажата кнопка Отмена Exit Sub End If 'если пароль неверный - завершаем процедуру без выполнения действий If vRetVal <> "1234" Then MsgBox "Введенный пароль неверный", vbCritical, "ClearAllCells" Exit Sub End If 'будет выполнено только если введен правильный пароль - 1234 'полная очистка всех ячеек активного листа ActiveSheet.Cells.Clear End Sub

Private Sub Workbook_Open() 'ThisWorkbook - Обращение к книге с кодом 'Но из модуля самой книги можно обращаться и проще - Me ThisWorkbook.Visible = False Dim user As String, lastrow As Long 'цикл, пока не будут указаны данные пользователя Do While user = "" user = InputBox("Введите имя пользователя:", "Авторизация", "") If StrPtr(user) = 0 Then MsgBox "Приложение будет закрыто", vbCritical, "Авторизация" ThisWorkbook.Close Exit Sub End If If user = "" Then MsgBox "Не указано имя пользователя!", vbCritical, "Авторизация" End If Loop With ThisWorkbook.Worksheets("LOG") 'получаем последнюю заполненную ячейку на листе "LOG" lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row 'записываем имя пользователя .Cells(lastrow + 1, 1) = user 'записываем время входа .Cells(lastrow + 1, 2) = Now End With End Sub

Что важно: этот код записывается в модуль ЭтаКнига(ThisWorkbook) и тогда при любом открытии книги будет появляться запрос на имя пользователя.

Так же некоторые примеры применения InputBox можно найти в статьях на сайте. Например:
Как удалить строки по условию?
Как массово изменить гиперссылки?

ДИАЛОГ ВВОДА ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЕМ - APPLICATION.INPUTBOX


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

InputBox Promt, [Title], [DefaultValue], [Left], [Top], [HelpFile], [HelpContextID], [Type]
почти все параметры аналогичны таким же параметрам в InputBox.
Promt - текст, отображаемый на самой форме. Иначе говоря - сама суть показа диалога.
Title - текст, отображаемый в заголовке окна. В приведенном выше примере это "Запрос данных".
DefaultValue - значение, которое будет показано в поле ввода до указания значения пользователем.
Left - положение окна InputBox в поинтах по горизонтали относительно левого края экрана. В отличие от простого InputBox положение определяется на основании расположения самого окна Excel, а не экрана.
Top - положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile - указывается имя файла-справки в формате .HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна - Help, которая и отвечает за вызов справки. Сам вызов справки осуществляется путем нажатия на иконку со знаком вопроса в заголовке диалога.
HelpContextID - целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.
Type - целое число. Указывается одно из предустановленных значений, указывающих диалогу Application.InputBox тип данных, которые предполагается получить от пользователя. Ниже приведен листинг кода, демонстрирующий запрос данных всех типов с описанием ограничений и нюансов.

Конечно, чаще всего используют Type:=8 , т.к. это избавляет от необходимости рисования своих форм и прочих заморочек для запроса указания диапазона от пользователя. Еще раз обращаю внимание, что для Type:=8 необходим ключевой оператор присвоения Set , т.к. в результате необходимо получить именно диапазон(т.е. объект). Ниже приведена процедура, которая запрашивает диапазон для очистки и корректно обрабатывает ситуацию при нажатии кнопки Отмена(т.е. не показывает никаких ошибок пользователю, а просто не выполняется). Стандартно при нажатии Отмена процедура завершается с ошибкой VBA вида Type Mismatch , что не очень грамотно с точки зрения взаимодействия с пользователем - он не должен видеть внутренние ошибки:

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

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

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

Адрес выделенного диапазона

Для определения адреса выделенного диапазона ячеек в VBA Excel используется свойство Address объекта Selection.

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

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

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



Определение адресов выделенного диапазона и активной ячейки

Копирование диапазона

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

Sub Макрос()
Range( " A1 " ).Select
Selection.Copy
Range( " B1 " ).Select
ActiveSheet.Paste
End Sub

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

Sub CopyRange()
Range( " А1 " ).Copy Range( " В1 " )
End Sub

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

Sub CopyRange2()
Workbooks( " File1.xlsx " ).Sheets( " Лист1 " ).Range( " A1 " ).Copy _
Workbooks( " File2.xlsx " ).Sheets( " Лист2 " ).Range( " A1 " )
End Sub

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

Sub CopyRange3()
Dim Rngl As Range, Rng2 As Range
Set Rngl = Workbooks( " File1.xlsx " ).Sheets( " Лист1 " ).Range( " A1 " )
Set Rng2 = Workbooks( " File2.xlsx " ).Sheets( " Лист2 " ).Range( " A1 " )
Rngl.Copy Rng2 End Sub

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

Sub CopyRange4 ()
Range( " А1:С800 " ).Copy Range( " D1 " )
End Sub

Для перемещения диапазона ячеек вместо метода Сору используется метод Cut.

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

Sub CopyCurrentRegion2()
Range( " A1 " ).CurrentRegion.Copy Sheets( " Лист2 " ).Range( " A1 " )
End Sub

Метод End имеет один аргумент, определяющий направление, в котором увеличивается выделение ячеек. Следующий оператор выделяет диапазон от активной ячейки до последней непустой ячейки внизу:

Range (ActiveCell, ActiveCell.End(xlDown)).Select

Три остальные константы имитируют комбинации клавиш при выделении в других направлениях: xlUp (вверх), xlToLeft (влево) и xlToRight (вправо).

В прилагаемом Excel-файле определено несколько распространенных типов выделения ячеек (см. рис. 1). Код любопытен тем, что является также примером создания контекстного меню.

Обращение к конкретной ячейке

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

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

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Запрос значения ячейки

Следующая процедура запрашивает значение у пользователя и вставляет его в ячейку А1:

Sub GetValuel()
Range( " A1 " ).Value = InputBox( " Введите значение " )
End Sub

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

Sub GetValue2()
Dim UserEntry As Variant
UserEntry = InputBox( " Введите значение " )
If UserEntry <> " " Then Range( " A1 " ).Value = UserEntry
End Sub

Во многих случаях следует проверить правильность данных, введенных пользователем. Например, необходимо обеспечить введение только чисел в диапазоне от 1 до 12 (рис. 2). Это можно сделать при помощи процедуры GetValue3(), код которой приведен в Модуле1 приложенного Excel-файла. Некорректные данные игнорируются, и окно запроса значения отображается снова. Этот цикл будет повторяться, пока пользователь не введет правильное значение или не щелкнет на кнопке Отмена.

Снять выделение со строк и столбцов

Аналогичным образом работает снятие выделения со строк и столбцов.

Если вы хотите выбрать весь лист, а затем снять выделение с некоторых конкретных столбцов, вы можете сделать это следующим образом:

  1. Выделите весь лист, нажав на треугольник в верхней левой части листа (или используйте сочетание клавиш Ctrl+A)
  2. Удерживая клавишу Ctrl, выберите нужные столбцы, нажимая на соответствую букву столбца.

Множественное выделение

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

Сначала определим, на самом ли деле у нас несколько областей. Для этого посчитаем их с помощью следующего кода:

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

Как вы видите организовать перебрать все выделенные области можно циклом For Each и для каждого диапазона вызывать функцию RangeType.

Ввод значения в следующую пустую ячейку

Если требуется ввести значение в следующую пустую ячейку столбца или строки, используйте код (рис. 3):

Sub GetData()
Dim NextRow As Long
Dim Entry1 As String, Entry2 As String
Do
' Определение следующей пустой строки
NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
' Запрос данных
Entry1 = InputBox( " Введите имя " )
If Entry1 = " " Then Exit Sub
Entry2 = InputBox( " Введите сумму " )
If Entry2 = " " Then Exit Sub
' Запись данных
Cells(NextRow, 1) = Entry1
Cells(NextRow, 2) = Entry2
Loop
End Sub

Это бесконечный цикл. Для выхода из него (щелкните на кнопке Cancel) использовались операторы Exit Sub. Обратите внимание строку, в который определяется значение переменной NextRow. Если вам трудно ее понять, проанализируйте содержимое ячейки: перейдите в последнюю ячейку столбца А и нажмите <End> и <↑>. После этого будет выделена последняя непустая ячейка в столбце А. Свойство Row возвращает номер этой строки; чтобы получить расположенную под ней строку (следующую пустую строку), к этому номеру прибавляется 1.

Чтение значения из ячейки

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

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Определение номеров первой и последней строки

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

в чем разница между двумя. Я всегда думал, что VBA-это несколько "искалеченная" версия VB, но когда друг спросил меня на днях, я понятия не имел, каковы фактические различия.

кроме того, когда вы используете, например, Excel, это VB или VBA ?

почти для всех целей программирования VBA и VB 6.0-одно и то же.

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

кроме того, есть разница в IDE - VB 6.0 IDE является более мощным по сравнению. С другой стороны, у вас есть тесная интеграция хозяина приложение в VBA. Глобальные объекты приложений (например," ActiveDocument") и события доступны без объявления, поэтому программирование для конкретных приложений является прямым.

тем не менее, ничто не мешает вам запускать Word, загружать VBA IDE и решать проблему, которая не имеет никакого отношения к Word. Я не уверен, что есть что-то, что VB 6.0 может сделать (технически), и VBA не может. Я ищу лист сравнения на MSDN, хотя.

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

с помощью VB можно создать автономное приложение windows, что невозможно с помощью VBA.

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

редактировать: от VBA FAQ:

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

А. Microsoft Visual Basic for Applications (VBA) - это встраиваемая среда программирования, позволяющая разработчикам создавать пользовательские решения, используя всю мощь Microsoft Visual Basic. Разработчики, использующие приложения, на которых размещается VBA, могут автоматизировать и расширить приложение функциональность, сокращение цикла разработки пользовательских бизнес-решений.

  • у них же спецификация: независимое от реализации описание того, что содержит язык и что он означает. Вы можете прочитать его здесь: [MS-VBAL]: спецификация языка VBA
  • они же платформа: Они оба компилируются в Microsoft P-Code, который в свою очередь выполняется той же виртуальной машиной, которая реализована в dll msvbvm[x.0].файл DLL.

на старый справочник VB я наткнулся в прошлом году автор (Пол Ломакс) даже утверждал, что " VBA " всегда было именем самого языка, независимо от того, используется ли он в автономных приложениях или во встроенных контекстах (таких как MS Office):

"прежде чем мы пойдем дальше, давайте просто проясним фундаментальный момент. Visual Basic for Applications (VBA) - язык, используемый для программирования в Visual Basic (VB). Сам VB является средой разработки; языковым элементом этой среды является VBA."

незначительные различия

VBA (Visual Basic для приложений)-это VB-классический язык сценариев, встроенный в приложения Microsoft Office. Я думаю, что его языковые функции похожи на функции VB5 (ему просто не хватает нескольких встроенных функций), но:

у вас есть доступ к документу office, для которого вы написали VBA-скрипт, и поэтому вы можете, например,

  • написать макросы (=автоматические процедуры для небольших повторяющихся задачи в вашем офисе-работа)
  • определение новых функций для excel-cell-formula
  • обработка данных office

пример: задайте значение ячейки excel

VBC и-.NET не являются языками сценариев. Вы используете их для написания автономных приложений с отдельными IDE, которые вы не можете сделать с VBA (VBA-скрипты просто "существуют" в Office)

на самом деле VBA можно использовать для компиляции DLL. Выпуски Office 2000 и Office XP Developer включали редактор VBA, который можно было использовать для создания библиотек DLL для использования в качестве надстроек COM.

VB не является языком. VB-это программа, которая размещает VBA, так же как Office размещает VBA. VB-это набор объектов приложения, как Word и Excel, и пакет форм, как в Office.

таким образом, вы можете писать только код VBA в VB.

PS эта информация находится на INFO на VB вопрос страница для VB.

из VBA Info

VBA 6, было погружено в 1998 и включает в себя множество лицензированных хостов, среди них: Office 2000-2010, AutoCAD, Pi Processbook и автономный Visual Basic 6.0

VBA означает Visual Basic для приложений и его реализация Visual Basic, предназначенная для использования в Office Suite.

разница между ними заключается в том, что VBA встроен в документы Office (его функция Office). VB-это ide / язык для разработки приложений.

VB (Visual Basic только до 6.0) является надмножеством VBA (Visual Basic для приложений). Я знаю, что другие вроде как ускользнули от этого, но я понимаю, что семантика (т. е. словарь) VBA включена в VB6 (за исключением объектов, специфичных для офисных продуктов), поэтому VBA является подмножеством VB6. Синтаксис (т. е. порядок, в котором написаны слова) в VBA точно такой же, как и в VB6, но разница заключается в том, что объекты, доступные для VBA или VB6 разные, потому что у них разные цели. В частности, цель VBA-программно автоматизировать задачи, которые могут быть выполнены в MS Office, в то время как цель VB6-создание стандартных EXE, элементов управления ActiveX, библиотек ActiveX и ActiveX EXEs, которые могут работать автономно или в других программах, таких как MS Office или Windows.

Читайте также: