VBA Excel. Функция InStr (синтаксис, параметры, примеры)
Определение первого вхождения одной строки в другую с помощью функции InStr из кода VBA Excel. Синтаксис функции, параметры, примеры использования.
Описание функции InStr
InStr – это функция, которая предназначена для определения номера позиции первого вхождения одной строки в другую. Она возвращает значение типа Variant (Long).
Функция InStr ищет первое вхождение одной строки в другую с начала исходной строки. Для поиска первого совпадения с конца исходной строки используется функция InStrRev.
Функция InStr часто незаменима при определении параметров функций Left, Mid и Right. Также ее можно использовать для определения наличия искомой подстроки в заданной строке.
Еще есть в VBA Excel функция InStrB, которая работает с байтовыми данными, содержащимися в строке. Она возвращает позицию байта, а не символа первого вхождения одной строки в другую.
Синтаксис, параметры, значения
Синтаксис функции InStr
Полный вариант:
InStr([start], string1, string2, [compare]) |
Сокращенный вариант:
Чаще всего в VBA Excel используется сокращенный вариант функции со значениями необязательных параметров по умолчанию.
Параметры функции InStr
Параметр | Описание | Значение по умолчанию |
---|---|---|
start | Необязательный аргумент.* Числовое выражение, которое задает начальную позицию для поиска. | 1 |
string1 | Обязательный аргумент. Строковое выражение, в котором выполняется поиск. | – |
string2 | Обязательный аргумент. Искомое строковое выражение. | – |
compare | Необязательный аргумент. Задает тип сравнения строк. | –1** |
* Если задан аргумент compare, аргумент start является обязательным.
** Если аргумент compare не указан, используется значение инструкции Option Compare, заданное на уровне модуля. Если инструкция Option Compare в начале модуля отсутствует, используется ее значение по умолчанию – 0 (двоичное сравнение).
Если параметр start или параметр compare содержит значение NULL, возникает ошибка.
Значения аргумента «compare»
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | -1 | Сравнение с помощью параметра инструкции Option Compare. |
vbBinaryCompare | 0 | Двоичное (бинарное) сравнение.* |
vbTextCompare | 1 | Текстовое сравнение.* |
vbDatabaseCompare | 2 | Сравнение на основе сведений из базы данных. Только для Microsoft Access. |
* При двоичном сравнении учитывается регистр букв, при текстовом – не учитывается.
Значения функции InStr
Если | Возвращаемое значение |
---|---|
string2 найдена в string1 | Позиция первого найденного соответствия. |
string2 не найдена в string1 | 0 |
string2 является пустой | start |
string2 равна Null | Null |
string1 является пустой | 0 |
string1 равна Null | Null |
start больше длины string1 | 0 |
Примеры использования в VBA Excel
Пример 1
Самый простой пример:
Sub Test1() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «Фернандо») MsgBox x ‘Здесь x будет равен 9 End Sub |
Пример 2
В этом примере, используя одинаковые строки, в которых выполняется поиск, и искомые подстроки, применим разные виды сравнения – двоичное (бинарное) и текстовое, и посмотрим на результаты.
Sub Test2() Dim x As Variant x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 0) MsgBox x ‘Здесь x будет равен 36 (поиск с учетом регистра символов) x = InStr(10, «На горе Фернандо-По, где гуляет Гиппо-по», «по», 1) MsgBox x ‘Здесь x будет равен 18 (поиск без учета регистра символов) End Sub |
Обратите внимание: несмотря на то, что начало поиска мы задали с 10 символа, номер позиции первого вхождения считается с начала строки, в которой выполняется поиск.
Пример 3
В этом примере посмотрим на результаты посимвольного и побайтового сравнения, опять же используя одинаковые строки и искомые подстроки.
Sub Test3() Dim x As Variant x = InStr(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 4 x = InStrB(«На горе Фернандо-По, где гуляет Гиппо-по», «гор») MsgBox x ‘Здесь x будет равен 7 End Sub |
Результат 7 при побайтовом сравнении получен для кодировки, у которой один символ составляет 2 байта.
Функция InStr. Функции обработки строк в Excel (VBA)
Если часто приходится работать с электронными таблицами, то настоятельно рекомендуется ознакомиться с макросами. Это микропрограммы, настроенные на автоматизацию выполнения определенных действий. Они позволяют значительно расширить возможности как самого Excel, так и конкретного пользователя.
Одно из ключевых понятий языка программирования VBA (а именно на нем осуществляется написание макросов) является функция. Это блок программы, который обрабатывает определенные данные и возвращает какой-то конкретный результат.
Одной из таких функций является InStr. Давайте подробно рассмотрим ее основные аргументы, а также реальные примеры, описывающие ее использование в реальной жизни.
Но давайте сначала узнаем, зачем макросы нужны? Потому что многие начинающие пользователи Excel нередко ошибочно считают, что эта функция излишняя. Но на самом деле, они просто очень мало работали с этой программой.
Итак, давайте разберем функцию InStr более подробно.
Описание функции InStr
С помощью функции InStr пользователь может находить местонахождение первого вхождения какого-то текста в другой. Возвращаемый тип данных, осуществляемый этой функцией – Variant.
Сфера применения этой функции очень широкая, и без нее невозможно обойтись при использовании других функций, таких как Left, Mid, Right. Кроме этого, она может применяться для поиска какого-то текста.
Есть похожая функция в языке VBA, которая называется InStrB. Ее отличие заключается в том, что обрабатываются байтовые данные. С ее помощью можно узнать расположение байта, а не символа. Более подробно вы можете ознакомиться с этой функцией в третьем примере.
Преимущества функции InStr следующие:
- Возможность быстро обрабатывать огромные массивы данных буквально за несколько секунд. Когда человек осуществляет поиск вручную, только кажется, что все делает компьютер. НА самом деле, он выполняет лишь часть работы. Но все основное делается самим человеком. например, нужно вбить строку поиска, нажимать на стрелочки, чтобы искать определенное по счету вхождение и так далее. Это очень затратно. В случае же с функцией VBA InStr можно добиться этой цели с помощью макросов: с помощью формулы передать в функцию аргументы, а потом дальше использовать получившийся результат в другой функции. Таким образом автоматизируется огромное количество действий, которые при прочих равных пришлось бы выполнять вручную.
- Экономия времени. Есть сотрудники, которые за счет макросов смогли значительно увеличить эффективность своей работы и фактически не работать большую часть времени. Все, что им потребовалось – один раз написать скрипт, а потом просто передавать ему нужные параметры. И функция InStr является важной составляющей этого процесса, поскольку со строками приходится иметь дело постоянно, если человек активно использует электронные таблицы.
- Экономия ресурсов, в том числе, и интеллектуальных. Это тоже очень важный пункт. Ни для кого не секрет, что постоянное выполнение однотипных действий невероятно утомляет. Следовательно, функция InStr позволяет избавиться от бренной ноши постоянного поиска значений вручную, особенно если для этого используется формула.
Кстати! Использование функции InStr дает возможность значительно улучшить творческие способности!
Как? Очень просто. Исследователи доказали, что основной фактор, который мешает творческому процессу – это излишнее количество рутинных действий. В определенных пределах они помогают сосредоточиться (например, когда человек рисует что-то на автомате), но через некоторое время соответствующие нейронные связи начинают терять в скорости проведения нервных импульсов. Следовательно, на другие задачи уже сил не хватает. А творчество – это интеллектуально затратный процесс.
Если же использовать функцию InStr, можно освободить себя от этой бренной участи и уделить внимание другим важным вещам и создать не просто красивую, а функциональную таблицу, которая работает полностью автоматически и при этом содержит все необходимые данные.
А теперь давайте после лирического отступления все же перейдем к рассмотрению синтаксиса функции InStr.
Синтаксис функции InStr, параметры, значения
Синтаксис функции InStr
Если говорить об этой функции в общем, она записывается таким образом.
InStr([начало], строка1, строка2, [сравнение])
Но этот вариант полный, но очень часто используется сокращенная разновидность этой функции, содержащая всего два аргумента.
InStr(строка1, строка2)
Как правило, именно сокращенный вариант используется на практике. Нельзя сказать, что в ней вообще нет первого и последнего аргумента, просто автоматически применяются те значения, которые определены как «по умолчанию».
Параметры функции InStr
Давайте более подробно опишем, что означает каждый из аргументов:
- Начало. Этот параметр не является обязательным. В него записывается число, которым записывается изначальная позиция, с которой начинается поиск.
- Строка1. Этот аргумент нужно не забывать указывать. Это непосредственно тот текст, в котором нужно искать.
- Строка 2. Это то, что мы ищем.
- Сравнение. С помощью этого аргумента пользователь может задать способ, которым будут анализироваться и сопоставляться строки.
Важно учесть некоторые нюансы:
- Если пользователь записал последнее значение, то первое вводить обязательно.
- Если же параметр «Сравнение» в функции не прописан, то Эксель применяет значение по умолчанию (0 или другое при условии наличия инструкции Option Compare).
- Если пользователь укажет значение NULL в необязательные аргументы, то формула выдаст ошибку. Это нужно держать в уме.
Ну как? Сложно? Наверно, все же все просто. На первый взгляд может показаться, что запомнить все это довольно тяжело. Но в практике мастерство оттачивается. Поэтому настоятельно рекомендуется потренироваться «в песочнице».
Значения аргумента «сравнение»
С помощью аргумента «сравнение» человек может задавать тип сравнения. Делается это через указание значения, выраженного в цифровом формате. Если в качестве значения этого аргумента используется 1, то параметр означает сравнивание двух показателей с использованием инструкции Option Compare.
Если этому аргументу присвоить значение 1, то функция осуществляет бинарное сравнение. Простыми словами, при этом типе осуществляется поиск значения с учетом регистра. В случае же с текстовым сравнением регистр не учитывается.
Каждое значение, возвращаемое функцией, говорит о выполнении одного из возможных условий:
- Позиция первого найденного соответствия. Если возвращается строка, аналогичная тому, что было обнаружено в самом первом случае, то поиск оказался успешным.
- 0. Это значение говорит о том, что поиск оказался неудачным. Простыми словами, не получилось в первой строке отыскать вторую. Также нередко можно встретить такую ошибку в ситуациях, когда при попытке поиска оказывается, что первая строка не содержит никаких значений или же значение, передающееся аргументу «начало», оказывается большим, чем длина первой строки.
- Такое же значение, которое передается аргументу «начало». Это говорит о том, что вторая строка не содержит никаких значений.
- NULL. Эта проблема возникает в ситуациях, когда или строка 1, или строка 2 содержит аналогичную ошибку. Чаще всего эта проблема случается, если пользователь неправильно указал диапазон (например, указал неправильный оператор диапазона). Также если вводится несколько пересекающихся диапазонов, то эта ошибка может возникать, если человек неправильно применил оператор диапазона (коим служит символ пробела).
В последнем случае нужно удостовериться в том, что для указания диапазона был использован знак двоеточия. Например, если используется диапазон от А1 до А10, то нужно его записывать, как А1:А10.
Если же нужно указать несколько непересекающихся друг между другом наборов ячеек, то используется символ точки с запятой (некоторые говорят, что используется запятая, но это неправильно). Например, правильный ввод такой: А1:А10;С1:С10.
Если же используется пробел, нужно убедиться в том, что диапазоны действительно пересекаются. Если они расположены независимо друг от друга, это может породить множество проблем. Поэтому нужно или заменить знак, разделяющий диапазоны, на точку с запятой, или изменить диапазоны так, чтобы они пересеклись в том или ином месте.
Ну и простой пример для наглядности. Предположим, у нас есть диапазоны a1: A5 C1: C3.
В этом случае ячейки никак не пересекаются. Соответственно, будет возвращено значение NULL. Следовательно, пользователь увидит после вычисления по формуле с использованием аргументов, возвращающих это значение, также NULL. Ведь невозможно выполнять поиск в тех ячейках, где нет нормального значения пусть даже числового (хотя формула InStr лучше подходит для поиска именно текстовых соответствий).
Если в Excel включена функция автоматической проверки ошибок, то рядом с ошибочной ячейкой будет находиться восклицательный знак. Если на него нажать, появится возможность выбрать подходящую под текущую проблему ситуацию.
Примеры использования функции InStr в VBA Excel
Существует множество применений функции InStr при разработке макросов. Давайте разберем три простых примера, чтобы было более наглядно, как можно использовать ее в реальных (или воображаемых) условиях
Пример 1
Этот пример создан специально для новичков, поскольку демонстрирует чисто использование функции InStr. Следовательно, он является наиболее простым.
Sub Test1()
Dim x As Variant
x = InStr(“На горе Фернандо-По, где гуляет Гиппо-по”, “Фернандо”)
MsgBox x
‘Здесь x будет равен 9
End Sub
Пример 2
Этот пример показывает, как можно использовать текстовое и бинарное сравнение для поиска соответствий, в которых регистр символов важен и нет. В этом кейсе для примера были использованы две строки с одинаковым содержимым, чтобы было проще наглядно показать, как Excel учитывает регистр символ или не учитывает его в макросах.
Sub Test2()
Dim x As Variant
x = InStr(10, “На горе Фернандо-По, где гуляет Гиппо-по”, “по”, 0)
MsgBox x
‘Здесь x будет равен 36 (поиск с учетом регистра символов)
x = InStr(10, “На горе Фернандо-По, где гуляет Гиппо-по”, “по”, 1)
MsgBox x
‘Здесь x будет равен 18 (поиск без учета регистра символов)
End Sub
Здесь мы видим, что в качестве начального значения обозначен десятый символ. Но несмотря на это первое вхождение анализируется, стартуя той строкой, в которой осуществляется анализ информации на предмет соответствия заданному значению.
Пример 3
А в этом случае осуществляется сравнение сравнений посимвольного и побайтового типов. Здесь также для большей наглядности мы использовали одинаковые строки и подстроки, которые будем искать. А вот и сам пример.
Sub Test 3()
Dim x As Variant
x = InStr(“На горе Фернандо-По, где гуляет Гиппо-по”, “гор”)
MsgBox x
‘Здесь x будет равен 4
x = InStr(“На горе Фернандо-По, где гуляет Гиппо-по”, “гор”)
MsgBox x
‘Здесь x будет равен 7
End Sub
Выводы
Таким образом, функция InStr в языке программирования VBA, который используется в макросах, имеет очень много применений. Она полезна, когда есть оромный массивы данных, который невозможно проанализировать вручную, а встроенные средства автоматизации типа поиска также отнимают много времени и сил.
По сути, эта функция и являет собой тот же самый поиск за тем лишь исключением, что можно заранее задать Excel, при каких условиях и как он будет осуществляться.
Есть еще множество других волшебных функций, используемых для написания макросов, и мы обязательно познакомим вас с ними в следующий раз.
Оцените качество статьи. Нам важно ваше мнение:
VBA — Краткое руководство — CoderLessons.com
VBA означает V isual B asic для приложений A, языка программирования, управляемого событиями, от Microsoft, который в настоящее время преимущественно используется в офисных приложениях Microsoft, таких как MSExcel, MS-Word и MS-Access.
Он помогает техническим специалистам создавать специализированные приложения и решения для расширения возможностей этих приложений. Преимущество этого средства в том, что вам НЕ НУЖНО установить Visual Basic на наш ПК, однако установка Office неявно поможет в достижении этой цели.
Вы можете использовать VBA во всех офисных версиях, от MS-Office 97 до MS-Office 2013, а также с любой из последних доступных версий. Среди VBA Excel VBA является самым популярным. Преимущество использования VBA в том, что вы можете создавать очень мощные инструменты в MS Excel, используя линейное программирование.
Применение VBA
Вы можете задаться вопросом, зачем использовать VBA в Excel, поскольку MS-Excel сам по себе предоставляет множество встроенных функций. MS-Excel предоставляет только основные встроенные функции, которых может быть недостаточно для выполнения сложных вычислений. При таких обстоятельствах VBA становится наиболее очевидным решением.
Например, очень сложно рассчитать ежемесячное погашение кредита, используя встроенные формулы Excel. Скорее, легко запрограммировать VBA для такого расчета.
Доступ к редактору VBA
В окне Excel нажмите «ALT + F11». Откроется окно VBA, как показано на следующем снимке экрана.
В этой главе вы узнаете, как написать простой макрос шаг за шагом.
Шаг 1. Сначала включите меню «Разработчик» в Excel 20XX. Чтобы сделать то же самое, нажмите Файл → Параметры.
Шаг 2 — Нажмите «Настроить ленту» и выберите «Разработчик». Нажмите «ОК».
Шаг 3 — Лента «Разработчик» появляется в строке меню.
Шаг 4 — Нажмите кнопку «Visual Basic», чтобы открыть редактор VBA.
Шаг 5 — Запустите сценарий, добавив кнопку. Нажмите Вставить → Выберите кнопку.
Шаг 6 — Выполните щелчок правой кнопкой мыши и выберите «Свойства».
Шаг 7 — Измените имя и подпись, как показано на следующем снимке экрана.
Шаг 8 — Теперь дважды нажмите кнопку, и схема подпрограммы отобразится, как показано на следующем снимке экрана.
Шаг 9 — Начните кодирование, просто добавив сообщение.
Private Sub say_helloworld_Click() MsgBox "Hi" End Sub
Шаг 10 — Нажмите кнопку, чтобы выполнить подпроцедуру. Вывод подпроцедуры показан на следующем снимке экрана.
Примечание. В следующих главах мы продемонстрируем использование простой кнопки, как описано в шагах с 1 по 10. Следовательно, важно тщательно понять эту главу.
В этой главе вы познакомитесь с обычно используемой терминологией Excel VBA. Эти термины будут использоваться в следующих модулях, поэтому важно понимать каждый из них.
Модули
Модули — это область, где написан код. Это новая рабочая тетрадь, поэтому никаких модулей нет.
Чтобы вставить модуль, перейдите к Вставка → Модуль. Как только модуль вставлен, «module1» будет создан.
Внутри модулей мы можем написать код VBA, а код написан в процедуре. Процедура / подпроцедура — это серия утверждений VBA, в которых указывается, что делать.
Процедура
Процедуры — это группа операторов, выполняемых как единое целое, которые инструктируют Excel, как выполнять определенную задачу. Выполняемая задача может быть очень простой или очень сложной задачей. Однако рекомендуется разбивать сложные процедуры на более мелкие.
Двумя основными типами процедур являются Sub и Function.
функция
Функция — это группа многократно используемого кода, которую можно вызывать в любом месте вашей программы. Это устраняет необходимость писать один и тот же код снова и снова. Это помогает программистам разделить большую программу на ряд небольших и управляемых функций.
Помимо встроенных функций, VBA позволяет также писать пользовательские функции, а операторы записываются между функцией и конечной функцией .
Подпроцедур
Подпроцедуры работают аналогично функциям. Хотя подпроцедуры НЕ возвращают значение, функции могут возвращать или не возвращать значение. Подпроцедуры могут быть вызваны без ключевого слова вызова. Подпроцедуры всегда заключены в инструкции Sub и End Sub .
Комментарии используются для документирования логики программы и пользовательской информации, с которой другие программисты могут беспрепятственно работать над тем же кодом в будущем.
Он включает в себя информацию, такую как разработанную, модифицированную, и может также включать встроенную логику. Комментарии игнорируются интерпретатором при исполнении.
Комментарии в VBA обозначаются двумя способами.
Любое утверждение, начинающееся с одинарной кавычки (‘), рассматривается как комментарий. Ниже приведен пример.
Любое утверждение, начинающееся с одинарной кавычки (‘), рассматривается как комментарий. Ниже приведен пример.
' This Script is invoked after successful login ' Written by : TutorialsPoint ' Return Value : True / False
Любое утверждение, которое начинается с ключевого слова «REM». Ниже приведен пример.
REM This Script is written to Validate the Entered Input REM Modified by : Tutorials point/user2
Функция MsgBox отображает окно сообщения и ждет, когда пользователь нажмет кнопку, а затем действие будет выполнено на основе кнопки, нажатой пользователем.
Синтаксис
MsgBox(prompt[,buttons][,title][,helpfile,context])
Описание параметра
Подсказка — Обязательный параметр. Строка, которая отображается в виде сообщения в диалоговом окне. Максимальная длина подсказки составляет около 1024 символов. Если сообщение распространяется более чем на строку, то строки могут быть разделены с помощью символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
Кнопки — необязательный параметр. Числовое выражение, определяющее тип отображаемых кнопок, стиль используемых значков, идентификатор кнопки по умолчанию и модальность окна сообщения. Если оставить пустым, значение по умолчанию для кнопок будет 0.
Заголовок — необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
Файл справки — необязательный параметр. Строковое выражение, определяющее файл справки, который будет использоваться для предоставления контекстной справки для диалогового окна.
Контекст — необязательный параметр. Числовое выражение, обозначающее номер контекста справки, назначенный автором справки для соответствующего раздела справки. Если предоставляется контекст, также должен быть предоставлен файл справки.
Подсказка — Обязательный параметр. Строка, которая отображается в виде сообщения в диалоговом окне. Максимальная длина подсказки составляет около 1024 символов. Если сообщение распространяется более чем на строку, то строки могут быть разделены с помощью символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
Кнопки — необязательный параметр. Числовое выражение, определяющее тип отображаемых кнопок, стиль используемых значков, идентификатор кнопки по умолчанию и модальность окна сообщения. Если оставить пустым, значение по умолчанию для кнопок будет 0.
Заголовок — необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
Файл справки — необязательный параметр. Строковое выражение, определяющее файл справки, который будет использоваться для предоставления контекстной справки для диалогового окна.
Контекст — необязательный параметр. Числовое выражение, обозначающее номер контекста справки, назначенный автором справки для соответствующего раздела справки. Если предоставляется контекст, также должен быть предоставлен файл справки.
Параметр Buttons может принимать любое из следующих значений:
0 vbOKOnly — отображает только кнопку ОК.
1 vbOKCancel — отображает кнопки OK и Отмена.
2 vbAbortRetryIgnore — отображает кнопки отмены, повторной попытки и игнорирования.
3 vbYesNoCancel — отображает кнопки «Да», «Нет» и «Отмена».
4 vBYesNo — отображает кнопки «Да» и «Нет».
5 vbRetryCancel — отображает кнопки «Повторить» и «Отмена».
16 vbCritical — отображает значок критического сообщения.
32 vbQuestion — отображает значок запроса предупреждения.
48 vbExclamation — отображает значок предупреждающего сообщения.
64 vbInformation — отображает значок информационного сообщения.
0 vbDefaultButton1 — первая кнопка по умолчанию.
256 vbDefaultButton2 — вторая кнопка по умолчанию.
512 vbDefaultButton3 — третья кнопка по умолчанию.
768 vbDefaultButton4 — четвертая кнопка по умолчанию.
0 vbApplicationModal Модальное приложение — текущее приложение не будет работать, пока пользователь не ответит на окно сообщения.
4096 vbSystemModal Системный модал — Все приложения не будут работать, пока пользователь не ответит на окно сообщения.
0 vbOKOnly — отображает только кнопку ОК.
1 vbOKCancel — отображает кнопки OK и Отмена.
2 vbAbortRetryIgnore — отображает кнопки отмены, повторной попытки и игнорирования.
3 vbYesNoCancel — отображает кнопки «Да», «Нет» и «Отмена».
4 vBYesNo — отображает кнопки «Да» и «Нет».
5 vbRetryCancel — отображает кнопки «Повторить» и «Отмена».
16 vbCritical — отображает значок критического сообщения.
32 vbQuestion — отображает значок запроса предупреждения.
48 vbExclamation — отображает значок предупреждающего сообщения.
64 vbInformation — отображает значок информационного сообщения.
0 vbDefaultButton1 — первая кнопка по умолчанию.
256 vbDefaultButton2 — вторая кнопка по умолчанию.
512 vbDefaultButton3 — третья кнопка по умолчанию.
768 vbDefaultButton4 — четвертая кнопка по умолчанию.
0 vbApplicationModal Модальное приложение — текущее приложение не будет работать, пока пользователь не ответит на окно сообщения.
4096 vbSystemModal Системный модал — Все приложения не будут работать, пока пользователь не ответит на окно сообщения.
Вышеуказанные значения логически разделены на четыре группы: первая группа (от 0 до 5) указывает кнопки, отображаемые в окне сообщения. Вторая группа (16, 32, 48, 64) описывает стиль значка, который должен отображаться, третья группа (0, 256, 512, 768) указывает, какая кнопка должна быть по умолчанию, и четвертая группа (0, 4096). ) определяет модальность окна сообщения.
Возвращаемые значения
Функция MsgBox может возвращать одно из следующих значений, которое можно использовать для определения кнопки, которую пользователь нажал в окне сообщения.
- 1 — vbOK — нажата кнопка ОК
- 2 — vbCancel — Отмена была нажата
- 3 — vbAbort — нажата кнопка «Прервать»
- 4 — vbRetry — повторная попытка была нажата
- 5 — vbIgnore — щелкнули Ignore
- 6 — vbYes — Да нажали
- 7 — vbNo — нет кликали
пример
Function MessageBox_Demo() 'Message Box with just prompt message MsgBox("Welcome") 'Message Box with title, yes no and cancel Butttons int a = MsgBox("Do you like blue color?",3,"Choose options") ' Assume that you press No Button msgbox ("The Value of a is " & a) End Function
Выход
Шаг 1. Указанную выше функцию можно выполнить, нажав кнопку «Выполнить» в окне VBA или вызвав функцию из рабочего листа Excel, как показано на следующем снимке экрана.
Шаг 2 — Отображается окно простого сообщения с сообщением «Добро пожаловать» и кнопкой «ОК»
Шаг 3 — После нажатия OK, появляется еще одно диалоговое окно с сообщением вместе с кнопками «да, нет и отмена».
Шаг 4 — После нажатия кнопки «Нет» значение этой кнопки (7) сохраняется в виде целого числа и отображается пользователю в виде окна сообщения, как показано на следующем снимке экрана. Используя это значение, можно понять, на какую кнопку нажал пользователь.
Функция InputBox предлагает пользователям ввести значения. После ввода значений, если пользователь нажимает кнопку OK или нажимает клавишу ВВОД на клавиатуре, функция InputBox возвращает текст в текстовое поле. Если пользователь нажмет кнопку «Отмена», функция вернет пустую строку («»).
Синтаксис
InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])
Описание параметра
Подсказка — обязательный параметр. Строка, которая отображается в виде сообщения в диалоговом окне. Максимальная длина подсказки составляет около 1024 символов. Если сообщение распространяется более чем на строку, то строки могут быть разделены с помощью символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
Заголовок — необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
По умолчанию — необязательный параметр. Текст по умолчанию в текстовом поле, который пользователь хотел бы отобразить.
XPos — необязательный параметр. Положение оси X представляет быстрое расстояние от левой стороны экрана по горизонтали. Если оставить это поле пустым, поле ввода будет горизонтально отцентрировано.
YPos — необязательный параметр. Положение оси Y представляет быстрое расстояние от левой стороны экрана по вертикали. Если оставить это поле пустым, поле ввода будет центрировано вертикально.
Helpfile — необязательный параметр. Строковое выражение, определяющее файл справки, который будет использоваться для предоставления контекстно-зависимой справки для диалогового окна.
контекст — необязательный параметр. Числовое выражение, обозначающее номер контекста справки, назначенный автором справки для соответствующего раздела справки. Если предоставляется контекст, также должен быть предоставлен файл справки.
Подсказка — обязательный параметр. Строка, которая отображается в виде сообщения в диалоговом окне. Максимальная длина подсказки составляет около 1024 символов. Если сообщение распространяется более чем на строку, то строки могут быть разделены с помощью символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
Заголовок — необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
По умолчанию — необязательный параметр. Текст по умолчанию в текстовом поле, который пользователь хотел бы отобразить.
XPos — необязательный параметр. Положение оси X представляет быстрое расстояние от левой стороны экрана по горизонтали. Если оставить это поле пустым, поле ввода будет горизонтально отцентрировано.
YPos — необязательный параметр. Положение оси Y представляет быстрое расстояние от левой стороны экрана по вертикали. Если оставить это поле пустым, поле ввода будет центрировано вертикально.
Helpfile — необязательный параметр. Строковое выражение, определяющее файл справки, который будет использоваться для предоставления контекстно-зависимой справки для диалогового окна.
контекст — необязательный параметр. Числовое выражение, обозначающее номер контекста справки, назначенный автором справки для соответствующего раздела справки. Если предоставляется контекст, также должен быть предоставлен файл справки.
пример
Давайте вычислим площадь прямоугольника путем получения значений от пользователя во время выполнения с помощью двух полей ввода (одно для длины и одно для ширины).
Function findArea() Dim Length As Double Dim Width As Double Length = InputBox("Enter Length ", "Enter a Number") Width = InputBox("Enter Width", "Enter a Number") findArea = Length * Width End Function
Выход
Шаг 1 — Чтобы выполнить то же самое, позвоните, используя имя функции, и нажмите Enter, как показано на следующем снимке экрана.
Шаг 2 — После выполнения отображается первое поле ввода (длина). Введите значение в поле ввода.
Шаг 3 — После ввода первого значения отображается второе поле ввода (ширина).
Шаг 4 — После ввода второго числа нажмите кнопку ОК. Область отображается, как показано на следующем снимке экрана.
Переменная — это именованная ячейка памяти, используемая для хранения значения, которое можно изменить во время выполнения скрипта. Ниже приведены основные правила именования переменных.
Вы должны использовать букву в качестве первого символа.
Вы не можете использовать пробел, точку (.), Восклицательный знак (!) Или символы @, &, $, # в имени.
Длина имени не может превышать 255 символов.
Вы не можете использовать зарезервированные ключевые слова Visual Basic в качестве имени переменной.
Вы должны использовать букву в качестве первого символа.
Вы не можете использовать пробел, точку (.), Восклицательный знак (!) Или символы @, &, $, # в имени.
Длина имени не может превышать 255 символов.
Вы не можете использовать зарезервированные ключевые слова Visual Basic в качестве имени переменной.
Синтаксис
В VBA вам необходимо объявить переменные перед их использованием.
Dim <<variable_name>> As <<variable_type>>
Типы данных
Существует много типов данных VBA, которые можно разделить на две основные категории, а именно числовые и нечисловые типы данных.
Числовые типы данных
В следующей таблице приведены числовые типы данных и допустимый диапазон значений.
Тип | Диапазон значений |
---|---|
Байт | От 0 до 255 |
целое число | От -32 768 до 32 767 |
Долго | От -2 147 483 648 до 2 147 483 648 |
не замужем | -3.402823E + 38 до -1.401298E-45 для отрицательных значений От 1.401298E-45 до 3.402823E + 38 для положительных значений. |
двойной | -1,79769313486232e + 308 до -4,94065645841247E-324 для отрицательных значений 4.94065645841247E-324 до 1.79769313486232e + 308 для положительных значений. |
валюта | От -922,337,203,685,477.5808 до 922,337,203,685,477.5807 |
Десятичный | +/- 79,228,162,514,264,337,593,543,950,335, если не используется десятичная дробь +/- 7,9228162514264337593543950335 (28 знаков после запятой). |
-3.402823E + 38 до -1.401298E-45 для отрицательных значений
От 1.401298E-45 до 3.402823E + 38 для положительных значений.
-1,79769313486232e + 308 до -4,94065645841247E-324 для отрицательных значений
4.94065645841247E-324 до 1.79769313486232e + 308 для положительных значений.
+/- 79,228,162,514,264,337,593,543,950,335, если не используется десятичная дробь
+/- 7,9228162514264337593543950335 (28 знаков после запятой).
Нечисловые типы данных
В следующей таблице приведены нечисловые типы данных и допустимый диапазон значений.
Тип | Диапазон значений |
---|---|
Строка (фиксированная длина) | От 1 до 65 400 знаков |
Строка (переменной длины) | От 0 до 2 миллиардов символов |
Дата | С 1 января 100 по 31 декабря 9999 |
логический | Правда или ложь |
объект | Любой вложенный объект |
Вариант (числовой) | Любое значение до двойного |
Вариант (текст) | То же, что и строка переменной длины |
пример
Давайте создадим кнопку и назовем ее «Variables_demo», чтобы продемонстрировать использование переменных.
Private Sub say_helloworld_Click() Dim password As String password = "Admin#1" Dim num As Integer num = 1234 Dim BirthDay As Date BirthDay = DateValue("30 / 10 / 2020") MsgBox "Passowrd is " & password & Chr(10) & "Value of num is " & num & Chr(10) & "Value of Birthday is " & BirthDay End Sub
Выход
После выполнения сценария выходные данные будут такими, как показано на следующем снимке экрана.
Константа — это именованная область памяти, используемая для хранения значения, которое НЕ МОЖЕТ быть изменено во время выполнения скрипта. Если пользователь пытается изменить значение константы, выполнение скрипта заканчивается ошибкой. Константы объявляются так же, как и переменные.
Ниже приведены правила именования констант.
Вы должны использовать букву в качестве первого символа.
Вы не можете использовать пробел, точку (.), Восклицательный знак (!) Или символы @, &, $, # в имени.
Длина имени не может превышать 255 символов.
Вы не можете использовать зарезервированные ключевые слова Visual Basic в качестве имени переменной.
Вы должны использовать букву в качестве первого символа.
Вы не можете использовать пробел, точку (.), Восклицательный знак (!) Или символы @, &, $, # в имени.
Длина имени не может превышать 255 символов.
Вы не можете использовать зарезервированные ключевые слова Visual Basic в качестве имени переменной.
Синтаксис
В VBA нам нужно присвоить значение объявленным константам. Выдается ошибка, если мы пытаемся изменить значение константы.
Const <<constant_name>> As <<constant_type>> = <<constant_value>>
пример
Давайте создадим кнопку «Constant_demo», чтобы продемонстрировать, как работать с константами.
Private Sub Constant_demo_Click() Const MyInteger As Integer = 42 Const myDate As Date = #2/2/2020# Const myDay As String = "Sunday" MsgBox "Integer is " & MyInteger & Chr(10) & "myDate is " & myDate & Chr(10) & "myDay is " & myDay End Sub
Выход
После выполнения сценария выходные данные будут отображаться, как показано на следующем снимке экрана.
Оператор может быть определен с помощью простого выражения — 4 + 5 равно 9. Здесь 4 и 5 называются операндами, а + — операторами . VBA поддерживает следующие типы операторов —
- Арифметические Операторы
- Операторы сравнения
- Логические (или реляционные) операторы
- Операторы конкатенации
Арифматические операторы
Следующие арифметические операторы поддерживаются VBA.
Предположим, что переменная A содержит 5, а переменная B содержит 10, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
+ | Добавляет два операнда | А + Б даст 15 |
— | Вычитает второй операнд из первого | А — Б даст -5 |
* | Умножает оба операнда | А * Б даст 50 |
/ | Делит числитель на знаменатель | Б / у даст 2 |
% | Оператор модуля и остаток после целочисленного деления | B% A даст 0 |
^ | Оператор экспонирования | B ^ A даст 100000 |
Операторы сравнения
В VBA поддерживаются следующие операторы сравнения.
Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
знак равно | Проверяет, равны ли значения двух операндов или нет. Если да, то условие верно. | (A = B) является ложным. |
<> | Проверяет, равны ли значения двух операндов или нет. Если значения не равны, то условие выполняется. | (A <> B) верно. |
> | Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, то условие верно. | (A> B) является ложным. |
< | Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, то условие верно. | (A <B) верно. |
> = | Проверяет, больше ли значение левого операнда или равно значению правого операнда. Если да, то условие верно. | (A> = B) является ложным. |
<= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда. Если да, то условие верно. | (A <= B) верно. |
Логические операторы
Следующие логические операторы поддерживаются VBA.
Предположим, что переменная A содержит 10, а переменная B содержит 0, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
А ТАКЖЕ | Называется логический оператор И. Если оба условия истинны, то выражение истинно. | a <> 0 И b <> 0 — Ложь. |
ИЛИ ЖЕ | Вызывается логическим оператором ИЛИ. Если любое из двух условий истинно, то условие истинно. | a <> 0 ИЛИ b <> 0 верно. |
НЕ | Вызывается логическим оператором НЕ. Используется для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. | НЕ (a <> 0 ИЛИ b <> 0) ложно. |
XOR | Называется логическим исключением. Это комбинация оператора NOT и OR. Если одно и только одно из выражений оценивается как Истина, результатом является Истина. | (a <> 0 XOR b <> 0) верно. |
Операторы конкатенации
Следующие операторы конкатенации поддерживаются VBA.
Предположим, что переменная A содержит 5, а переменная B содержит 10, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
+ | Добавляет два значения в качестве переменной. Значения числовые | А + Б даст 15 |
& | Объединяет два значения | А & Б даст 510 |
Допустим, переменная A = «Microsoft» и переменная B = «VBScript», тогда —
оператор | Описание | пример |
---|---|---|
+ | Объединяет два значения | A + B даст MicrosoftVBScript |
& | Объединяет два значения | A & B предоставит MicrosoftVBScript |
Примечание. Операторы конкатенации могут использоваться как для чисел, так и для строк. Вывод зависит от контекста, если переменные содержат числовое значение или строковое значение.
Принятие решений позволяет программистам контролировать ход выполнения скрипта или одного из его разделов. Выполнение регулируется одним или несколькими условными утверждениями.
Ниже приводится общая форма типичной структуры принятия решений, встречающейся в большинстве языков программирования.
VBA предоставляет следующие типы заявлений о принятии решений. Нажмите на следующие ссылки, чтобы проверить их детали.
Sr.No. | Заявление и описание |
---|---|
1 | если заявление Оператор if состоит из логического выражения, за которым следует один или несколько операторов. |
2 | если .. еще заявление Оператор if else состоит из логического выражения, за которым следует один или несколько операторов. Если условие истинно, выполняются операторы из операторов If . Если условие ложно, выполняется другая часть сценария. |
3 | если … еще одно заявление Оператор if, сопровождаемый одним или несколькими операторами ElseIf , который состоит из логических выражений, а затем сопровождается необязательным оператором else , который выполняется, когда все условия становятся ложными. |
4 | вложенные операторы if Оператор if или elseif внутри другого оператора if или elseif . |
5 | заявление о переключении Оператор switch позволяет проверять переменную на соответствие списку значений. |
Оператор if состоит из логического выражения, за которым следует один или несколько операторов.
Оператор if else состоит из логического выражения, за которым следует один или несколько операторов. Если условие истинно, выполняются операторы из операторов If . Если условие ложно, выполняется другая часть сценария.
Оператор if, сопровождаемый одним или несколькими операторами ElseIf , который состоит из логических выражений, а затем сопровождается необязательным оператором else , который выполняется, когда все условия становятся ложными.
Оператор if или elseif внутри другого оператора if или elseif .
Оператор switch позволяет проверять переменную на соответствие списку значений.
Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз. В общем случае операторы выполняются последовательно: первый оператор в функции выполняется первым, затем второй и так далее.
Языки программирования предоставляют различные управляющие структуры, которые допускают более сложные пути выполнения.
Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз. Ниже приводится общая форма оператора цикла в VBA.
VBA предоставляет следующие типы циклов для обработки требований циклов. Нажмите на следующие ссылки, чтобы проверить их детали.
Sr.No. | Тип и описание петли |
---|---|
1 | для цикла Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла. |
2 | для каждого цикла Это выполняется, если в группе есть хотя бы один элемент, и повторяется для каждого элемента в группе. |
3 | пока .. венд петля Это проверяет условие перед выполнением тела цикла. |
4 | сделай .. пока петли Операторы do..While будут выполняться до тех пор, пока условие истинно. (Т. Е.) Цикл должен повторяться до тех пор, пока условие не станет ложным. |
5 | делать .. до петель Операторы do..Until будут выполняться до тех пор, пока условие имеет значение False (т. Е.) Цикл должен повторяться до тех пор, пока условие не станет True. |
Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла.
Это выполняется, если в группе есть хотя бы один элемент, и повторяется для каждого элемента в группе.
Это проверяет условие перед выполнением тела цикла.
Операторы do..While будут выполняться до тех пор, пока условие истинно. (Т. Е.) Цикл должен повторяться до тех пор, пока условие не станет ложным.
Операторы do..Until будут выполняться до тех пор, пока условие имеет значение False (т. Е.) Цикл должен повторяться до тех пор, пока условие не станет True.
Заявления о контроле цикла
Операторы управления циклом изменяют выполнение от его нормальной последовательности. Когда выполнение выходит из области видимости, все остальные операторы в цикле НЕ выполняются.
VBA поддерживает следующие операторы управления. Нажмите на следующие ссылки, чтобы проверить их детали.
S.No. | Контрольное заявление и описание |
---|---|
1 | Выход для выписки Завершает оператор цикла For и передает выполнение в оператор, следующий сразу за циклом |
2 | Выйти Do заявление Завершает оператор Do While и переносит выполнение в оператор сразу после цикла |
Завершает оператор цикла For и передает выполнение в оператор, следующий сразу за циклом
Завершает оператор Do While и переносит выполнение в оператор сразу после цикла
Строки — это последовательность символов, которая может состоять из букв, цифр, специальных символов или всех из них. Переменная называется строкой, если она заключена в двойные кавычки «».
Синтаксис
variablename = "string"
Примеры
str1 = "string" ' Only Alphabets str2 = "132.45" ' Only Numbers str3 = "!@#$;*" ' Only Special Characters Str4 = "Asc23@#" ' Has all the above
Строковые функции
Существуют предопределенные функции VBA String, которые помогают разработчикам очень эффективно работать со строками. Ниже приведены строковые методы, которые поддерживаются в VBA. Пожалуйста, нажмите на каждый из методов, чтобы узнать подробно.
Sr.No. | Название и описание функции |
---|---|
1 | InStr Возвращает первое вхождение указанной подстроки. Поиск происходит слева направо. |
2 | InStrRev Возвращает первое вхождение указанной подстроки. Поиск происходит справа налево. |
3 | LCASE Возвращает нижний регистр указанной строки. |
4 | UCase Возвращает верхний регистр указанной строки. |
5 | Оставил Возвращает определенное количество символов с левой стороны строки. |
6 | Правильно Возвращает определенное количество символов с правой стороны строки. |
7 | средний Возвращает определенное количество символов из строки на основе указанных параметров. |
8 | LTrim Возвращает строку после удаления пробелов в левой части указанной строки. |
9 | RTrim Возвращает строку после удаления пробелов с правой стороны указанной строки. |
10 | Отделка Возвращает строковое значение после удаления начальных и конечных пробелов. |
11 | Len Возвращает длину заданной строки. |
12 | замещать Возвращает строку после замены строки другой строкой. |
13 | Космос Заполняет строку указанным количеством пробелов. |
14 | StrComp Возвращает целочисленное значение после сравнения двух указанных строк. |
15 | строка Возвращает строку с указанным символом указанное количество раз. |
16 | StrReverse Возвращает строку после изменения последовательности символов данной строки. |
Возвращает первое вхождение указанной подстроки. Поиск происходит слева направо.
Возвращает первое вхождение указанной подстроки. Поиск происходит справа налево.
Возвращает нижний регистр указанной строки.
Возвращает верхний регистр указанной строки.
Возвращает определенное количество символов с левой стороны строки.
Возвращает определенное количество символов с правой стороны строки.
Возвращает определенное количество символов из строки на основе указанных параметров.
Возвращает строку после удаления пробелов в левой части указанной строки.
Возвращает строку после удаления пробелов с правой стороны указанной строки.
Возвращает строковое значение после удаления начальных и конечных пробелов.
Возвращает длину заданной строки.
Возвращает строку после замены строки другой строкой.
Заполняет строку указанным количеством пробелов.
Возвращает целочисленное значение после сравнения двух указанных строк.
Возвращает строку с указанным символом указанное количество раз.
Возвращает строку после изменения последовательности символов данной строки.
Функции даты и времени VBScript помогают разработчикам преобразовывать дату и время из одного формата в другой или выражать значение даты или времени в формате, соответствующем определенному условию.
Функции даты
Sr.No. | Описание функции |
---|---|
1 | Дата Функция, которая возвращает текущую системную дату. |
2 | CDate Функция, которая преобразует данный вход в дату. |
3 | DateAdd Функция, которая возвращает дату, к которой был добавлен указанный интервал времени. |
4 | DateDiff Функция, которая возвращает разницу между двумя периодами времени. |
5 | DatePart Функция, которая возвращает указанную часть заданного значения даты ввода. |
6 | DateSerial Функция, которая возвращает действительную дату для данного года, месяца и даты. |
7 | FormatDateTime Функция, которая форматирует дату на основе предоставленных параметров. |
8 | IsDate Функция, которая возвращает логическое значение независимо от того, является ли предоставленный параметр датой. |
9 | День Функция, которая возвращает целое число от 1 до 31, представляющее день указанной даты. |
10 | Месяц Функция, которая возвращает целое число от 1 до 12, представляющее месяц указанной даты. |
11 | Год Функция, которая возвращает целое число, представляющее год указанной даты. |
12 | MonthName Функция, которая возвращает название определенного месяца для указанной даты. |
13 | WeekDay Функция, которая возвращает целое число (от 1 до 7), которое представляет день недели для указанного дня. |
14 | WeekDayName Функция, которая возвращает название дня недели для указанного дня. |
Функция, которая возвращает текущую системную дату.
Функция, которая преобразует данный вход в дату.
Функция, которая возвращает дату, к которой был добавлен указанный интервал времени.
Функция, которая возвращает разницу между двумя периодами времени.
Функция, которая возвращает указанную часть заданного значения даты ввода.
Функция, которая возвращает действительную дату для данного года, месяца и даты.
Функция, которая форматирует дату на основе предоставленных параметров.
Функция, которая возвращает логическое значение независимо от того, является ли предоставленный параметр датой.
Функция, которая возвращает целое число от 1 до 31, представляющее день указанной даты.
Функция, которая возвращает целое число от 1 до 12, представляющее месяц указанной даты.
Функция, которая возвращает целое число, представляющее год указанной даты.
Функция, которая возвращает название определенного месяца для указанной даты.
Функция, которая возвращает целое число (от 1 до 7), которое представляет день недели для указанного дня.
Функция, которая возвращает название дня недели для указанного дня.
Функции времени
Sr.No. | Описание функции |
---|---|
1 | Сейчас Функция, которая возвращает текущую системную дату и время. |
2 | Час Функция, которая возвращает целое число от 0 до 23, представляющее часовую часть данного времени. |
3 | минут Функция, которая возвращает целое число от 0 до 59, которое представляет часть минут данного времени. |
4 | второй Функция, которая возвращает целое число от 0 до 59, которое представляет часть секунд данного времени. |
5 | Время Функция, которая возвращает текущее системное время. |
6 | таймер Функция, которая возвращает количество секунд и миллисекунд с 12:00. |
7 | TimeSerial Функция, которая возвращает время для конкретного ввода часов, минут и секунд. |
8 | TimeValue Функция, которая преобразует входную строку в формат времени. |
Функция, которая возвращает текущую системную дату и время.
Функция, которая возвращает целое число от 0 до 23, представляющее часовую часть данного времени.
Функция, которая возвращает целое число от 0 до 59, которое представляет часть минут данного времени.
Функция, которая возвращает целое число от 0 до 59, которое представляет часть секунд данного времени.
Функция, которая возвращает текущее системное время.
Функция, которая возвращает количество секунд и миллисекунд с 12:00.
Функция, которая возвращает время для конкретного ввода часов, минут и секунд.
Функция, которая преобразует входную строку в формат времени.
Мы очень хорошо знаем, что переменная является контейнером для хранения значения. Иногда разработчики могут одновременно хранить более одного значения в одной переменной. Когда ряд значений хранится в одной переменной, она называется переменной массива .
Декларация массива
Массивы объявляются так же, как и переменная, за исключением того, что объявление переменной массива использует круглые скобки. В следующем примере размер массива указан в скобках.
'Method 1 : Using Dim Dim arr1() 'Without Size 'Method 2 : Mentioning the Size Dim arr2(5) 'Declared with size of 5 'Method 3 : using 'Array' Parameter Dim arr3 arr3 = Array("apple","Orange","Grapes")
Хотя размер массива указан как 5, он может содержать 6 значений, так как индекс массива начинается с нуля.
Индекс массива не может быть отрицательным.
Массивы VBScript могут хранить переменные любого типа в массиве. Следовательно, массив может хранить целое число, строку или символы в одной переменной массива.
Хотя размер массива указан как 5, он может содержать 6 значений, так как индекс массива начинается с нуля.
Индекс массива не может быть отрицательным.
Массивы VBScript могут хранить переменные любого типа в массиве. Следовательно, массив может хранить целое число, строку или символы в одной переменной массива.
Присвоение значений массиву
Значения присваиваются массиву путем указания значения индекса массива для каждого из назначаемых значений. Это может быть строка.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim arr(5) arr(0) = "1" 'Number as String arr(1) = "VBScript" 'String arr(2) = 100 'Number arr(3) = 2.45 'Decimal Number arr(4) = #10/07/2013# 'Date arr(5) = #12.45 PM# 'Time msgbox("Value stored in Array index 0 : " & arr(0)) msgbox("Value stored in Array index 1 : " & arr(1)) msgbox("Value stored in Array index 2 : " & arr(2)) msgbox("Value stored in Array index 3 : " & arr(3)) msgbox("Value stored in Array index 4 : " & arr(4)) msgbox("Value stored in Array index 5 : " & arr(5)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Value stored in Array index 0 : 1 Value stored in Array index 1 : VBScript Value stored in Array index 2 : 100 Value stored in Array index 3 : 2.45 Value stored in Array index 4 : 7/10/2013 Value stored in Array index 5 : 12:45:00 PM
Многомерные массивы
Массивы не просто ограничены одним измерением, однако они могут иметь максимум 60 измерений. Двумерные массивы являются наиболее часто используемыми.
пример
В следующем примере объявляется многомерный массив с 3 строками и 4 столбцами.
Private Sub Constant_demo_Click() Dim arr(2,3) as Variant ' Which has 3 rows and 4 columns arr(0,0) = "Apple" arr(0,1) = "Orange" arr(0,2) = "Grapes" arr(0,3) = "pineapple" arr(1,0) = "cucumber" arr(1,1) = "beans" arr(1,2) = "carrot" arr(1,3) = "tomato" arr(2,0) = "potato" arr(2,1) = "sandwitch" arr(2,2) = "coffee" arr(2,3) = "nuts" msgbox("Value in Array index 0,1 : " & arr(0,1)) msgbox("Value in Array index 2,2 : " & arr(2,2)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Value stored in Array index : 0 , 1 : Orange Value stored in Array index : 2 , 2 : coffee
ReDim Заявление
Оператор ReDim используется для объявления переменных динамического массива и выделения или перераспределения пространства хранения.
Синтаксис
ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Описание параметра
Сохранять — необязательный параметр, используемый для сохранения данных в существующем массиве при изменении размера последнего измерения.
Varname — обязательный параметр, который обозначает имя переменной, которое должно соответствовать стандартным соглашениям об именах переменных.
Subscripts — обязательный параметр, который указывает размер массива.
Сохранять — необязательный параметр, используемый для сохранения данных в существующем массиве при изменении размера последнего измерения.
Varname — обязательный параметр, который обозначает имя переменной, которое должно соответствовать стандартным соглашениям об именах переменных.
Subscripts — обязательный параметр, который указывает размер массива.
пример
В следующем примере массив был переопределен, а затем значения сохранены при изменении существующего размера массива.
Примечание. При изменении размера массива, меньшего, чем он был изначально, данные в удаленных элементах будут потеряны.
Private Sub Constant_demo_Click() Dim a() as variant i = 0 redim a(5) a(0) = "XYZ" a(1) = 41.25 a(2) = 22 REDIM PRESERVE a(7) For i = 3 to 7 a(i) = i Next 'to Fetch the output For i = 0 to ubound(a) Msgbox a(i) Next End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
XYZ 41.25 22 3 4 5 6 7
Методы массива
В VBScript есть различные встроенные функции, которые помогают разработчикам эффективно обрабатывать массивы. Все методы, которые используются в сочетании с массивами, перечислены ниже. Пожалуйста, нажмите на название метода, чтобы узнать о нем подробно.
Sr.No. | Описание функции |
---|---|
1 | LBound Функция, которая возвращает целое число, соответствующее наименьшему нижнему индексу из указанных массивов. |
2 | UBound Функция, которая возвращает целое число, соответствующее наибольшему нижнему индексу заданных массивов. |
3 | Трещина Функция, которая возвращает массив, содержащий указанное количество значений. Разделить на основе разделителя. |
4 | Присоединиться Функция, которая возвращает строку, которая содержит указанное количество подстрок в массиве. Это прямо противоположная функция метода разделения. |
5 | Фильтр Функция, которая возвращает нулевой массив, который содержит подмножество строкового массива на основе определенных критериев фильтра. |
6 | IsArray Функция, которая возвращает логическое значение, указывающее, является ли входная переменная массивом. |
7 | стирать Функция, которая восстанавливает выделенную память для переменных массива. |
Функция, которая возвращает целое число, соответствующее наименьшему нижнему индексу из указанных массивов.
Функция, которая возвращает целое число, соответствующее наибольшему нижнему индексу заданных массивов.
Функция, которая возвращает массив, содержащий указанное количество значений. Разделить на основе разделителя.
Функция, которая возвращает строку, которая содержит указанное количество подстрок в массиве. Это прямо противоположная функция метода разделения.
Функция, которая возвращает нулевой массив, который содержит подмножество строкового массива на основе определенных критериев фильтра.
Функция, которая возвращает логическое значение, указывающее, является ли входная переменная массивом.
Функция, которая восстанавливает выделенную память для переменных массива.
Функция — это группа многократно используемого кода, который можно вызывать в любом месте вашей программы. Это устраняет необходимость писать один и тот же код снова и снова. Это позволяет программистам разделить большую программу на ряд небольших и управляемых функций.
Помимо встроенных функций, VBA позволяет также писать пользовательские функции. В этой главе вы узнаете, как писать свои собственные функции в VBA.
Определение функции
Функция VBA может иметь необязательный оператор возврата. Это необходимо, если вы хотите вернуть значение из функции.
Например, вы можете передать два числа в функцию, а затем ожидать от функции возврата их умножения в вызывающей программе.
Примечание . Функция может возвращать несколько значений, разделенных запятой, в виде массива, назначенного имени функции.
Прежде чем использовать функцию, нам нужно определить эту конкретную функцию. Наиболее распространенный способ определения функции в VBA — использование ключевого слова Function , за которым следует уникальное имя функции, которое может содержать или не содержать список параметров и оператор с ключевым словом End Function , который указывает конец функции. Ниже приведен основной синтаксис.
Синтаксис
Добавьте кнопку и добавьте следующую функцию.
Function Functionname(parameter-list) statement 1 statement 2 statement 3 ....... statement n End Function
пример
Добавьте следующую функцию, которая возвращает область. Обратите внимание, что значение / значения могут быть возвращены с самим именем функции.
Function findArea(Length As Double, Optional Width As Variant) If IsMissing(Width) Then findArea = Length * Length Else findArea = Length * Width End If End Function
Вызов функции
Чтобы вызвать функцию, вызовите функцию, используя имя функции, как показано на следующем снимке экрана.
Вывод области, как показано ниже, будет отображаться пользователю.
Подпроцедуры похожи на функции, однако есть несколько отличий.
Подпроцедуры НЕ возвращают значение, в то время как функции могут возвращать или не возвращать значение.
Подпроцедуры МОГУТ быть вызваны без ключевого слова вызова.
Подпроцедуры всегда заключены в инструкции Sub и End Sub.
Подпроцедуры НЕ возвращают значение, в то время как функции могут возвращать или не возвращать значение.
Подпроцедуры МОГУТ быть вызваны без ключевого слова вызова.
Подпроцедуры всегда заключены в инструкции Sub и End Sub.
пример
Sub Area(x As Double, y As Double) MsgBox x * y End Sub
Процедуры вызова
Чтобы вызвать процедуру где-нибудь в скрипте, вы можете сделать вызов из функции. Мы не сможем использовать тот же способ, что и для функции, так как подпроцедура НЕ возвратит значение.
Function findArea(Length As Double, Width As Variant) area Length, Width ' To Calculate Area 'area' sub proc is called End Function
Теперь вы сможете вызывать только функцию, но не подпроцедуру, как показано на следующем снимке экрана.
Площадь рассчитывается и отображается только в окне сообщения.
В ячейке результата отображается НОЛЬ, так как значение области НЕ возвращается из функции. Короче говоря, вы не можете сделать прямой вызов подпроцедуры из листа Excel.
VBA, программирование, управляемое событиями, может быть запущено, когда вы вручную изменяете ячейку или диапазон значений ячейки. Изменение события может упростить задачу, но вы можете очень быстро завершить страницу, полную форматирования. Есть два вида событий.
- События рабочего листа
- Рабочая тетрадь События
События рабочего листа
События рабочего листа инициируются при изменении рабочего листа. Он создается путем щелчка правой кнопкой мыши на вкладке листа и выбора «просмотра кода», а затем вставки кода.
Пользователь может выбрать каждый из этих рабочих листов и выбрать «Рабочий лист» из выпадающего списка, чтобы получить список всех поддерживаемых событий рабочего листа.
Ниже приведены поддерживаемые события рабочего листа, которые могут быть добавлены пользователем.
Private Sub Worksheet_Activate() Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Private Sub Worksheet_Calculate() Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_Deactivate() Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Private Sub Worksheet_SelectionChange(ByVal Target As Range)
пример
Допустим, нам просто нужно отобразить сообщение перед двойным щелчком.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "Before Double Click" End Sub
Выход
При двойном щелчке по любой ячейке окно сообщения отображается пользователю, как показано на следующем снимке экрана.
Рабочая тетрадь События
События рабочей книги инициируются, когда происходит изменение рабочей книги в целом. Мы можем добавить код для событий рабочей книги, выбрав «ThisWorkbook» и выбрав «рабочая книга» из выпадающего списка, как показано на следующем снимке экрана. Немедленно подпрограмма Workbook_open отображается пользователю, как показано на следующем снимке экрана.
Ниже приведены поддерживаемые события Workbook, которые могут быть добавлены пользователем.
Private Sub Workbook_AddinUninstall() Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_BeforePrint(Cancel As Boolean) Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Private Sub Workbook_Deactivate() Private Sub Workbook_NewSheet(ByVal Sh As Object) Private Sub Workbook_Open() Private Sub Workbook_SheetActivate(ByVal Sh As Object) Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Private Sub Workbook_WindowActivate(ByVal Wn As Window) Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) Private Sub Workbook_WindowResize(ByVal Wn As Window)
пример
Допустим, нам просто нужно отобразить пользователю сообщение о том, что новый лист успешно создан, каждый раз, когда создается новый лист.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "New Sheet Created Successfully" End Sub
Выход
После создания нового листа Excel пользователю отображается сообщение, как показано на следующем снимке экрана.
Существует три типа ошибок в программировании: (a) синтаксические ошибки, (b) ошибки времени выполнения и (c) логические ошибки.
Синтаксические ошибки
Синтаксические ошибки, также называемые ошибками синтаксического анализа, возникают во время интерпретации VBScript. Например, следующая строка вызывает синтаксическую ошибку, поскольку в ней отсутствует закрывающая скобка.
Function ErrorHanlding_Demo() dim x,y x = "Tutorialspoint" y = Ucase(x End Function
Ошибки во время выполнения
Ошибки времени выполнения, также называемые исключениями, возникают во время выполнения после интерпретации.
Например, следующая строка вызывает ошибку во время выполнения, потому что здесь синтаксис правильный, но во время выполнения он пытается вызвать fnmultiply, который является несуществующей функцией.
Function ErrorHanlding_Demo1() Dim x,y x = 10 y = 20 z = fnadd(x,y) a = fnmultiply(x,y) End Function Function fnadd(x,y) fnadd = x + y End Function
Логические ошибки
Логические ошибки могут быть наиболее сложным типом ошибок для отслеживания. Эти ошибки не являются результатом синтаксиса или ошибки времени выполнения. Вместо этого они возникают, когда вы совершаете ошибку в логике, управляющей вашим сценарием, и вы не получаете ожидаемого результата.
Вы не можете поймать эти ошибки, потому что это зависит от требований вашего бизнеса, какую логику вы хотите использовать в своей программе.
Например, деление числа на ноль или написанного скрипта, который входит в бесконечный цикл.
Err Object
Предположим, если у нас есть ошибка во время выполнения, то выполнение останавливается, отображая сообщение об ошибке. Как разработчик, если мы хотим зафиксировать ошибку, то используется Error Object.
пример
В следующем примере Err.Number дает номер ошибки, а Err.Description — описание ошибки.
Err.Raise 6 ' Raise an overflow error. MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description Err.Clear ' Clear the error.
Обработка ошибок
VBA включает подпрограмму обработки ошибок, а также может использоваться для отключения подпрограммы обработки ошибок. Без оператора On Error любая ошибка во время выполнения является фатальной: отображается сообщение об ошибке, и выполнение резко останавливается.
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Sr.No. | Ключевое слово и описание |
---|---|
1 | Линия GoTo Включает процедуру обработки ошибок, которая начинается со строки, указанной в требуемом аргументе строки. Указанная строка должна быть в той же процедуре, что и оператор On Error, иначе произойдет ошибка времени компиляции. |
2 | Перейти 0 Отключает включенный обработчик ошибок в текущей процедуре и сбрасывает его в Nothing. |
3 | GoTo -1 Отключает включенное исключение в текущей процедуре и сбрасывает его в Nothing. |
4 | Продолжить дальше Указывает, что при возникновении ошибки во время выполнения элемент управления переходит к оператору, который следует сразу за оператором, в котором произошла ошибка, и выполнение продолжается с этой точки. |
Линия GoTo
Включает процедуру обработки ошибок, которая начинается со строки, указанной в требуемом аргументе строки. Указанная строка должна быть в той же процедуре, что и оператор On Error, иначе произойдет ошибка времени компиляции.
Перейти 0
Отключает включенный обработчик ошибок в текущей процедуре и сбрасывает его в Nothing.
GoTo -1
Отключает включенное исключение в текущей процедуре и сбрасывает его в Nothing.
Продолжить дальше
Указывает, что при возникновении ошибки во время выполнения элемент управления переходит к оператору, который следует сразу за оператором, в котором произошла ошибка, и выполнение продолжается с этой точки.
пример
Public Sub OnErrorDemo() On Error GoTo ErrorHandler ' Enable error-handling routine. Dim x, y, z As Integer x = 50 y = 0 z = x / y ' Divide by ZERO Error Raises ErrorHandler: ' Error-handling routine. Select Case Err.Number ' Evaluate error number. Case 10 ' Divide by zero error MsgBox ("You attempted to divide by zero!") Case Else MsgBox "UNKNOWN ERROR - Error# " & Err.Number & " : " & Err.Description End Select Resume Next End Sub
При программировании с использованием VBA есть несколько важных объектов, с которыми пользователь будет иметь дело.
- Объекты приложения
- Объекты рабочей книги
- Объекты рабочего листа
- Диапазон объектов
Объекты приложения
Объект Application состоит из следующих элементов:
- Общесоциальные настройки и опции.
- Методы, которые возвращают объекты верхнего уровня, такие как ActiveCell, ActiveSheet и т. Д.
пример
'Example 1 : Set xlapp = CreateObject("Excel.Sheet") xlapp.Application.Workbooks.Open "C:\test.xls" 'Example 2 : Application.Windows("test.xls").Activate 'Example 3: Application.ActiveCell.Font.Bold = True
Объекты рабочей книги
Объект Workbook является членом коллекции Workbooks и содержит все объекты Workbook, открытые в настоящее время в Microsoft Excel.
пример
'Ex 1 : To close Workbooks Workbooks.Close 'Ex 2 : To Add an Empty Work Book Workbooks.Add 'Ex 3: To Open a Workbook Workbooks.Open FileName:="Test.xls", ReadOnly:=True 'Ex : 4 - To Activate WorkBooks Workbooks("Test.xls").Worksheets("Sheet1").Activate
Объекты рабочего листа
Объект Worksheet является членом коллекции Worksheets и содержит все объекты Worksheet в рабочей книге.
пример
'Ex 1 : To make it Invisible Worksheets(1).Visible = False 'Ex 2 : To protect an WorkSheet Worksheets("Sheet1").Protect password:=strPassword, scenarios:=True
Диапазон объектов
Объекты Range представляют ячейку, строку, столбец или выборку ячеек, содержащих один или несколько непрерывных блоков ячеек.
'Ex 1 : To Put a value in the cell A5 Worksheets("Sheet1").Range("A5").Value = "5235" 'Ex 2 : To put a value in range of Cells Worksheets("Sheet1").Range("A1:A4").Value = 5
Вы также можете прочитать файл Excel и записать содержимое ячейки в текстовый файл, используя VBA. VBA позволяет пользователям работать с текстовыми файлами двумя способами:
- Объект файловой системы
- используя команду записи
Объект файловой системы (FSO)
Как следует из названия, FSO помогают разработчикам работать с дисками, папками и файлами. В этом разделе мы обсудим, как использовать FSO.
Sr.No. | Тип объекта и описание |
---|---|
1 | Привод Драйв — это объект. Содержит методы и свойства, которые позволяют собирать информацию о диске, подключенном к системе. |
2 | приводы Диски это коллекция. Он предоставляет список дисков, подключенных к системе, физически или логически. |
3 | файл Файл является объектом. Он содержит методы и свойства, которые позволяют разработчикам создавать, удалять или перемещать файл. |
4 | файлы Файлы это коллекция. Он предоставляет список всех файлов, содержащихся в папке. |
5 | скоросшиватель Папка — это объект. Он предоставляет методы и свойства, которые позволяют разработчикам создавать, удалять или перемещать папки. |
6 | Папки Папки это коллекция. Он предоставляет список всех папок в папке. |
7 | TextStream TextStream — это объект. Это позволяет разработчикам читать и писать текстовые файлы. |
Привод
Драйв — это объект. Содержит методы и свойства, которые позволяют собирать информацию о диске, подключенном к системе.
приводы
Диски это коллекция. Он предоставляет список дисков, подключенных к системе, физически или логически.
файл
Файл является объектом. Он содержит методы и свойства, которые позволяют разработчикам создавать, удалять или перемещать файл.
файлы
Файлы это коллекция. Он предоставляет список всех файлов, содержащихся в папке.
скоросшиватель
Папка — это объект. Он предоставляет методы и свойства, которые позволяют разработчикам создавать, удалять или перемещать папки.
Папки
Папки это коллекция. Он предоставляет список всех папок в папке.
TextStream
TextStream — это объект. Это позволяет разработчикам читать и писать текстовые файлы.
Привод
Диск — это объект, который обеспечивает доступ к свойствам конкретного диска или общей сетевой папки. Следующие свойства поддерживаются объектом Drive —
- Доступное пространство
- DriveLetter
- Тип вождения
- Файловая система
- Свободное место
- Готов
- Дорожка
- Корневая папка
- Серийный номер
- ShareName
- Общий размер
- VolumeName
пример
Шаг 1. Прежде чем приступить к написанию сценариев с использованием FSO, мы должны включить Microsoft Scripting Runtime. Чтобы сделать то же самое, перейдите в Инструменты → Ссылки, как показано на следующем снимке экрана.
Шаг 2. Добавьте «Microsoft Scripting RunTime» и нажмите «ОК».
Шаг 3 — Добавьте данные, которые вы хотели бы записать в текстовый файл, и добавьте командную кнопку.
Шаг 4 — Теперь пришло время для сценария.
Private Sub fn_write_to_text_Click() Dim FilePath As String Dim CellData As String Dim LastCol As Long Dim LastRow As Long Dim fso As FileSystemObject Set fso = New FileSystemObject Dim stream As TextStream LastCol = ActiveSheet.UsedRange.Columns.Count LastRow = ActiveSheet.UsedRange.Rows.Count ' Create a TextStream. Set stream = fso.OpenTextFile("D:\Try\Support.log", ForWriting, True) CellData = "" For i = 1 To LastRow For j = 1 To LastCol CellData = Trim(ActiveCell(i, j).Value) stream.WriteLine "The Value at location (" & i & "," & j & ")" & CellData Next j Next i stream.Close MsgBox ("Job Done") End Sub
Выход
При выполнении сценария убедитесь, что курсор помещен в первую ячейку рабочего листа. Файл Support.log создается, как показано на следующем снимке экрана в разделе «D: \ Try».
Содержимое файла показано на следующем снимке экрана.
Написать команду
В отличие от FSO, нам НЕ нужно добавлять ссылки, однако мы НЕ сможем работать с дисками, файлами и папками. Мы сможем просто добавить поток в текстовый файл.
пример
Private Sub fn_write_to_text_Click() Dim FilePath As String Dim CellData As String Dim LastCol As Long Dim LastRow As Long LastCol = ActiveSheet.UsedRange.Columns.Count LastRow = ActiveSheet.UsedRange.Rows.Count FilePath = "D:\Try\write.txt" Open FilePath For Output As #2 CellData = "" For i = 1 To LastRow For j = 1 To LastCol CellData = "The Value at location (" & i & "," & j & ")" & Trim(ActiveCell(i, j).Value) Write #2, CellData Next j Next i Close #2 MsgBox ("Job Done") End Sub
Выход
После выполнения сценария файл «write.txt» создается в папке «D: \ Try», как показано на следующем снимке экрана.
Содержимое файла показано на следующем снимке экрана.
Используя VBA, вы можете создавать графики на основе определенных критериев. Давайте посмотрим на это на примере.
Шаг 1 — Введите данные, по которым должен быть сгенерирован график.
Шаг 2 — Создайте 3 кнопки — одну для создания гистограммы, другую для создания круговой диаграммы и другую для создания столбчатой диаграммы.
Шаг 3 — Разработайте макрос, чтобы сгенерировать каждый из этих типов диаграмм.
' Procedure to Generate Pie Chart Private Sub fn_generate_pie_graph_Click() Dim cht As ChartObject For Each cht In Worksheets(1).ChartObjects cht.Chart.Type = xlPie Next cht End Sub ' Procedure to Generate Bar Graph Private Sub fn_Generate_Bar_Graph_Click() Dim cht As ChartObject For Each cht In Worksheets(1).ChartObjects cht.Chart.Type = xlBar Next cht End Sub ' Procedure to Generate Column Graph Private Sub fn_generate_column_graph_Click() Dim cht As ChartObject For Each cht In Worksheets(1).ChartObjects cht.Chart.Type = xlColumn Next cht End Sub
Шаг 4 — При нажатии на соответствующую кнопку создается диаграмма. В следующем выводе нажмите кнопку «Сгенерировать круговую диаграмму».
Форма пользователя — это настраиваемое диалоговое окно, которое делает ввод пользовательских данных более управляемым и более простым в использовании для пользователя. В этой главе вы научитесь разрабатывать простую форму и добавлять данные в Excel.
Шаг 1 — Перейдите к окну VBA, нажав Alt + F11 и перейдите к меню «Вставить» и выберите «Форма пользователя». После выбора форма пользователя отображается, как показано на следующем снимке экрана.
Шаг 2 — Разработка форм с использованием заданных элементов управления.
Шаг 3 — После добавления каждого элемента управления, элементы управления должны быть названы. Заголовок соответствует тому, что отображается в форме, а имя соответствует логическому имени, которое будет появляться при написании кода VBA для этого элемента.
Шаг 4 — Ниже приведены имена против каждого из добавленных элементов управления.
контроль | Логическое имя | титр |
---|---|---|
От | frmempform | Форма сотрудника |
Идентификационная этикетка сотрудника | EmpID | ID сотрудника |
Имя Label Box | имя | Имя |
фамилия этикетка | Фамилия | Фамилия |
Dob Label Box | дата рождения | Дата рождения |
Mailid Label Box | почтовый идентификатор | Email ID |
Этикетка для паспорта | Держатель паспорта | Держатель паспорта |
Текстовое поле Emp ID | txtempid | Непригодный |
Имя Текстовое поле | txtfirstname | Непригодный |
Фамилия Текстовое поле | txtlastname | Непригодный |
Текстовое поле идентификатора электронной почты | txtemailid | Непригодный |
Поле со списком даты | cmbdate | Непригодный |
Поле со списком месяцев | cmbmonth | Непригодный |
Поле со списком | cmbyear | Непригодный |
Да радио кнопка | radioyes | да |
Нет радио кнопки | radiono | нет |
Кнопка «Отправить» | btnsubmit | Отправить |
Кнопка Отмена | btncancel | отменить |
Шаг 5 — Добавьте код для события загрузки формы, выполнив щелчок правой кнопкой мыши на форме и выбрав «Просмотреть код».
Шаг 6 — Выберите «Userform» из выпадающего списка объектов и выберите метод «Initialize», как показано на следующем снимке экрана.
Шаг 7 — После загрузки формы убедитесь, что текстовые поля очищены, раскрывающиеся окна заполнены и переключатели сброшены.
Private Sub UserForm_Initialize() 'Empty Emp ID Text box and Set the Cursor txtempid.Value = "" txtempid.SetFocus 'Empty all other text box fields txtfirstname.Value = "" txtlastname.Value = "" txtemailid.Value = "" 'Clear All Date of Birth Related Fields cmbdate.Clear cmbmonth.Clear cmbyear.Clear 'Fill Date Drop Down box - Takes 1 to 31 With cmbdate .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" .AddItem "25" .AddItem "26" .AddItem "27" .AddItem "28" .AddItem "29" .AddItem "30" .AddItem "31" End With 'Fill Month Drop Down box - Takes Jan to Dec With cmbmonth .AddItem "JAN" .AddItem "FEB" .AddItem "MAR" .AddItem "APR" .AddItem "MAY" .AddItem "JUN" .AddItem "JUL" .AddItem "AUG" .AddItem "SEP" .AddItem "OCT" .AddItem "NOV" .AddItem "DEC" End With 'Fill Year Drop Down box - Takes 1980 to 2014 With cmbyear .AddItem "1980" .AddItem "1981" .AddItem "1982" .AddItem "1983" .AddItem "1984" .AddItem "1985" .AddItem "1986" .AddItem "1987" .AddItem "1988" .AddItem "1989" .AddItem "1990" .AddItem "1991" .AddItem "1992" .AddItem "1993" .AddItem "1994" .AddItem "1995" .AddItem "1996" .AddItem "1997" .AddItem "1998" .AddItem "1999" .AddItem "2000" .AddItem "2001" .AddItem "2002" .AddItem "2003" .AddItem "2004" .AddItem "2005" .AddItem "2006" .AddItem "2007" .AddItem "2008" .AddItem "2009" .AddItem "2010" .AddItem "2011" .AddItem "2012" .AddItem "2013" .AddItem "2014" End With 'Reset Radio Button. Set it to False when form loads. radioyes.Value = False radiono.Value = False End Sub
Шаг 8 — Теперь добавьте код в кнопку «Отправить». Нажав кнопку «Отправить», пользователь сможет добавить значения в таблицу.
Private Sub btnsubmit_Click() Dim emptyRow As Long 'Make Sheet1 active Sheet1.Activate 'Determine emptyRow emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 'Transfer information Cells(emptyRow, 1).Value = txtempid.Value Cells(emptyRow, 2).Value = txtfirstname.Value Cells(emptyRow, 3).Value = txtlastname.Value Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value Cells(emptyRow, 5).Value = txtemailid.Value If radioyes.Value = True Then Cells(emptyRow, 6).Value = "Yes" Else Cells(emptyRow, 6).Value = "No" End If End Sub
Шаг 9 — Добавьте метод, чтобы закрыть форму, когда пользователь нажимает кнопку Отмена.
Private Sub btncancel_Click() Unload Me End Sub
Шаг 10 — Заполните форму, нажав кнопку «Выполнить». Введите значения в форму и нажмите кнопку «Отправить». Автоматически значения будут перетекать в лист, как показано на следующем снимке экрана.
VBScript: Строковые функции vbs | scriptcoding.ru
В этой статье рассмотрены строковые функции vbs сценариев, которые могут пригодиться при написании собственного текстового редактора или, просто, при работе со строковыми значениями и с символами. Для каждой функции я написал vbs сценарий, и дал ссылку на архив для скачивания.
Строковые функции vbs
Asc(str) – С помощью этой строковой функции vbs можно получить ASCII-код первого символа в строке str. Параметр str может быть пробелом или содержать только один символ.
'********************************** ' Получение кода символа ' asc.vbs '********************************** dim a, b, c a = asc(" ") b = asc("string") c = asc("A") MsgBox a & vbCrLf & b & vbCrLf & c |
Chr(code) – Данная vbs строковая функция позволяет получить символ, указав в качестве параметра его ASCII-код
'********************************** ' Получение символа по его коду ' chr.vbs '********************************** dim i, list for i=100 to 120 list = list & chr(i) & vbCrLf next MsgBox list |
InStr([start,] str1, str2 [, compare]) – позволяет определить позицию, с которой начинается искомая последовательность символов в заданной строчке.
Start – данный аргумент является числом, и задает позицию, начиная с которой надо начать поиск. Если аргумент отсутствует, то поиск производится с начала.
string1 – собственно, та строка, в которой надо произвести поиск.
string2 – тут мы задаем те символы, которые ищем.
compare – данный параметр может принимать значения vbBinaryCompare (учет регистра, значение 0) и vbTextCompare (без учета регистра, значение 1).
'********************************** ' Поиск в строке ' InStr.vbs '********************************** dim my_str, index_1, index_2, index_3 my_str = "это 3-й ПРИМЕР сценария на vbs" index_1 = InStr(1,my_str,"пример",vbTextCompare) '9 index_2 = InStr(3,my_str,"пример",vbBinaryCompare) '0 index_3 = InStr(15,my_str,"пример",vbTextCompare) '0 MsgBox index_1 & vbCrLf & index_2 & vbCrLf & index_3 |
InStrRev(strl, str2[, start [, compare]] ) – Аналогично работе предыдущей строковой vbs функции, но поиск идет в обратном порядке.
'********************************** ' Поиск в строке ' InStrRev.vbs '********************************** dim my_str, index_1, index_2, index_3 my_str = "это 3-й ПРИМЕР сценария на vbs" index_1 = InStrRev(my_str,"пример",1,vbTextCompare) '0 index_2 = InStrRev(my_str,"пример",3,vbVinaryCompare) '0 index_3 = InStrRev(my_str,"пример",15,vbTextCompare) '9 MsgBox index_1 & vbCrLf & index_2 & vbCrLf & index_3 |
Join(list[, delim]) – позволяет объединить все значения элементов массива в одну строку. Тут list – одномерный массив, а delim – необязательный параметр, который задает символ разделитель.
'********************************** ' Работа с массивом ' Join.vbs '********************************** dim my_str, index_1, index_2, index_3, my_arr my_arr = Array(1, "a","b","c",3) my_str = Join(my_arr, "--") MsgBox my_str |
LCase(str) – Позволяет преобразовать все символы к нижнему регистру.
'********************************** ' Преобразование к нижнему регистру ' LCase.vbs '********************************** dim my_str, my_str_L my_str = "ВЕРХНИЙ РЕГИСТР" my_str_L = LCase(my_str) MsgBox my_str_L |
UCase(str) — Позволяет преобразовать все символы к верхнему регистру.
'********************************** ' Преобразование к верхнему регистру ' UCase.vbs '********************************** dim my_str, my_str_U my_str = "нижний регистр" my_str_U = UCase(my_str) MsgBox my_str_U |
Left(str, len) – Вернёт заданное количество (len) знаков с начала строки str.
'********************************** ' Вырезка слева ' left.vbs '********************************** dim my_str, my_str_result my_str = "нижний регистр" my_str_result = Left(my_str, 4) MsgBox my_str_result |
Right(str, len) — Вернёт заданное количество (len) знаков с конца строки str.
'********************************** ' Вырезка справа ' right.vbs '********************************** dim my_str, my_str_result my_str = "нижний регистр" my_str_result = Right(my_str, 4) MsgBox my_str_result |
Len(str) – Использование этой строковой функции vbs позволяет определить количество знаков в str.
'********************************** ' Длина строки ' len.vbs '********************************** dim my_str my_str = "нижний регистр" MsgBox len(my_str) '14 знаков |
LTrim(str) — удаление пробелов в начале.
RTrim(str) — удаление пробелов в конце.
Trim(str) – удаление пробелов в начале и в конце.
Скачать архив с примерами
'********************************** ' Удаление пробелов ' trim.vbs '********************************** dim my_str my_str = " нижний регистр " MsgBox LTrim(my_str) MsgBox RTrim(my_str) MsgBox Trim(my_str) |
Space(x) — Просто формирует строчку из пробелов количеством x.
'********************************** ' Формирование пробелов ' space.vbs '********************************** dim my_str_1, my_str_2, my_space my_str_1 = "первый" my_str_2 = "второй" my_space = space(10) MsgBox my_str_1 & my_space & my_str_2 |
String(number, char) – Формирование строчки, которая состоит из заданного количества (number) определенных символов (char).
'********************************** ' Формирование строчки ' string.vbs '********************************** dim my_str my_str = string(10,"a") MsgBox my_str |
Mid(str, start [, len]) – Формирование из строчки str подстрочки, которая будет начинаться с позиции start, параметр len позволяет указать длину. Строковые функции vbs.
'********************************** ' Извлечение подстроки ' mid.vbs '********************************** dim my_str my_str = "первый второй и третий" MsgBox mid(my_str, 4,8) |
Replace(str, find, replacewith [, start[, count[, compare]]]) – Позволяет производит замену в строке.
str – начальная строка.
find – подстрока, которую мы ищем.
replacewith – подставляемое значение.
start – начало поиска.
count – количество замен, по умолчанию стоит -1, что говорит о полной замене.
compare – параметр принимает значения vbBinaryCompare (учет регистра, значение 0) и vbTextCompare (без учета регистра, значение 1).
'********************************** ' Замена ' replace.vbs '********************************** dim my_str my_str = "первый четвертый и третий" MsgBox replace(my_str, "четвертый", "второй") |
Split(str[, delim[, count[, compare]]]) – Производит парсинг строки на подстроки и заполняет ими возвращаемый массив.
str – строка для обработки.
delim – разделитель (по умолчанию — пробел).
count – количество, по умолчанию – значение -1 (все элементы).
compare — параметр принимает значения vbBinaryCompare (учет регистра, значение 0) и vbTextCompare (без учета регистра, значение 1).
'********************************** ' Парсинг ' split.vbs '********************************** dim my_str, my_arr, index, list my_str = "один, два, три, четыри, пять" my_arr = split(my_str, ", ") for each index in my_arr list = list & index & vbCrLf next MsgBox list |
StrComp(str1, str2[, compare]) – функция сравнения str1 строки и строки str2. Если они равны, возвращается 0, если str1<str2, то возвращается -1, если str1>str2 – возвращается 1. Параметр compare принимает значения vbBinaryCompare (учет регистра, значение 0) и vbTextCompare (без учёта регистра, значение 1). Строковые функции vbs.
'********************************** ' Сравнение ' StrComp.vbs '********************************** dim my_str_1, my_str_2, result my_str_1 = "однажды" my_str_2 = "однажды" result = StrComp(my_str_1, my_str_2) MsgBox result |
Благодарю всех за внимание, надеюсь, материал статьи был для вас полезным.
НОУ ИНТУИТ | Основы офисного программирования и язык VBA
Форма обучения:
дистанционная
Стоимость самостоятельного обучения:
бесплатно
Доступ:
свободный
Документ об окончании:
Уровень:
Для всех
Длительность:
30:52:00
Выпускников:
312
Качество курса:
4.65 | 4.29
Курс адресован программистам, работающим в среде Office, и использующим язык VBA для настройки офисных документов. Хотя он написан применительно к среде Office 2000, он сохраняет свою актуальность и для современной офисной среды. Он содержит полное описание языка Visual Basic, начиная с описания переменных и объектов, операторов языка и процедур и заканчивая созданием классов. Подробно разбираются вопросы: создание семейства классов, наследование интерфейсов, реализация полиморфизма, создание классов с событиями, программирование Win API, функции обратного вызова, новые функции разбора строк и многое другое.
Курс построен нетрадиционно. Первые 6 лекций, адресованы программистам, уже знакомым с языком VBA и имеющим опыт работы в среде Office. Документы и проекты, классы и объекты, семейства классов, динамические классы, классы как обертка, программирование Win API – все эти темы подробно обсуждаются в этой части курса.
Теги: activex, callback, chart, keypresses, microsoft word, seek, vba, VBE, workbook, worksheet, алгоритмы, библиотеки, интерфейсы, книги, компоненты, операционные системы, охраняемые блоки, поиск, презентации, приложения, программирование, процедуры, процессоры, рабочая книга, функция обратного вызова, элементыДополнительные курсы
2 часа 30 минут
—
Введение
Введение. Об Office 2000. Офисное программирование. Состав Office 2000. Инсталляция Office 2000. Содержимое диска «Resource Kit». Документ Issues. Документ ORK9. Папка Tools. Содержимое диска «Language Pack». Microsoft Office 2000 Developer. Об этой книге. Моя благодарность.—
Начнем с объектов Office 2000
VBA и объекты — обзор. Библиотека объектов Office 2000 — каркас приложений. Построение каркаса документа. Библиотека объектов Office 2000 и Object Browser. Объекты Application. Коллекции в Office 2000. Коллекции Excel: Workbooks, Sheets. Коллекции Word: Documents, Paragraphs, Characters, Words, Sentences. Объекты Selection. Активные объекты и метод Activate. Macrorecorder.—
Документы и проекты
Проектирование документов. Документ и его программный проект. Модули — обработчики событий. Стандартные модули. Модули классов. Модуль макросов. Структура модуля. Окно проекта. Свойства проекта. Имя проекта. Защита проекта. Окно кода. Еще раз о «переиспользовании» модулей. Проект и область видимости. Система документов и ее проект. Организация системы документов. Как организуются ссылки между проектами. Обмен информацией между документами. Система документов One — Two — Three.—
Типы данных и переменные
Типы данных. Простые типы данных. Объявление переменных и констант простых типов. Синтаксис объявления простых переменных. Объявления по умолчанию. Константы. Массивы. Динамические массивы. Записи и тип, определенный программистом. Что можно делать с записями? Раздел объявлений. Раздел опций. Разделы констант, типов и переменных. Раздел Declare. Правила именования.—
Классы и объекты
Типы и классы. Еще раз о понятии «класс». Что нового в классах «Office 2000». Создание класса «Личность». Объекты и переменные Объекты, класс которых определен пользователем. Объекты «родного» приложения. ActiveX-объекты Модуль класса. Свойства. Сокрытие свойств. Конструкторы и деструкторы. Стандартные события. Стандартные события Initialize и Terminate. Два конструктора класса Rational Процедуры — свойства. Как создаются процедуры — свойства. Синтаксис Let, Get и Set. Классы, как упаковка. Семейство классов и процедуры — свойства. Методы. События. Классы, объекты With Events и обработчики событий . Модуль класса с объектом WithEvents. Объект WithEvents. События собственных классов. Как создать класс с событиями. Как зажигаются события. Где и как следует создавать обработчики событий для экземпляров класса. Связывание объектов Реальные объекты и инициирование событий. Итоги.—
Семейство классов и наследование интерфейсов. Динамические классы
Семейство классов и реализация интерфейсов. Наследование. Виртуальные методы и полиморфизм. Абстрактные классы. Наследование и полиморфизм в Office 2000. Наследование интерфейсов. Полиморфизм семейства классов. Проект «Люди и Машины». Создание динамических структур данных. Встроенный динамический класс Collection. Создание собственных динамических классов. Обертывание коллекции VBA.—
WinApi
Несколько слов об API, Win32, DLL. .VBA и Win32 API. Вызов функций и оператор Declare. Две кодировки ANSI и Unicode. API Viewer. Два языка: C и VB. Различия при вызове функций. Соответствие между простыми типами данных. Структуры языка C и тип, определенный пользователем, в языке VBA. Об описателях языка C и объектах Windows. Void функции языка C. Вызов аргументов по ссылке ByRef и по значению ByVal. Строковые аргументы при вызове функций Win32 API. Тип Any. Примеры работы с Win32 API функциями. Работа с окнами. Характеристики окружения. Вызов функций Win32 API, работающих в Unicode кодировке. Обработка ошибок, возникающих при вызове функций Win32 API. Функции API и вызов Callback функций. Функции высших порядков и конструкция AddressOf. Функция EnumWindows. Функции Win32 API для работы с таймером. Функция SetTimer. Функция обратного вызова TimerProc. Функция KillTimer. Пример создания, работы и удаления таймера. Классы как обертка вызовов функций Win32 API. Построение и использование класса ВашТаймер.—
Операторы
Операторы и строки. Оператор комментария.Присваивание. Оператор Let. Оператор RSet. Оператор Set. Управляющие операторы. Условный оператор If Then Else End If. Оператор выбора Select Case. Цикл For Next Цикл Do…Loop. Цикл While…Wend. Цикл For Each…Next. Работа с каталогами, папками и файлами. Изменение текущего диска: оператор ChDrive. Изменение текущего каталога (папки): оператор ChDir. Создание каталога (папки): оператор MkDir. Переименование каталогов (папок) и файлов: оператор Name. Удаление каталога (папки): оператор RmDir. Установка атрибутов файла: оператор SetAttr. Копирование файлов: оператор FileCopy. Удаление файлов: оператор Kill. Прочие операторы. Операции с одним объектом. Оператор With. Звуковой сигнал: оператор Beep. Установка системной даты: оператор Date. Установка системного времени: оператор Time. Моделирование ввода с клавиатуры: оператор SendKeys.—
Операции и встроенные функции
Операции. Работа с числовыми данными. Математические функции. Работа со строками. Сравнение строк. Сравнение с образцом. Основные операции над строками. Новые функции для работы со строками. Функция InStrRev — поиск последнего вхождения подстроки. Функция Replace — замена всех вхождений подстроки. Удаление подстроки. Разбор строки. Функции Split, Join и Filter. Преобразование строки в массив. Функция Split. Сборка элементов массива в строку. Функция Join Фильтрация элементов массива. Функция Filter Несколько модификаций встроенных функций. Замена, основанная на шаблоне. Функция WildReplace. Замена разных символов строки. Функция CharSetReplace Фильтрация, основанная на шаблоне. Функция WildFilter Разбор строки, допускающей разные разделители ее элементов. Функция WildSplit. Работа с датами и временем. Присваивание значений. Встроенные функции для работы с датами. Определение текущей даты или времени. Вычисления над датами Функция Timer и хронометраж вычислений. Некоторые встроенные функции. Функции проверки типов данных Преобразование типов данных. Форматирование данных. Функции группы Format. Другие функции форматирования.—
Процедуры и функции
Описание и создание процедур. Классификация процедур. Синтаксис процедур и функций. Функции с побочным эффектом. Создание процедур обработки событий. Вызовы процедур Sub. Вызовы функций. Использование именованных аргументов. Аргументы, являющиеся массивами. Задача о медиане. Пользовательские функции, принимающие сложный объект Range. Рекурсивные процедуры. Деревья поиска: Класс TreeNode; Класс BinTree; Работа со словарем.—
Отладка и оптимизация программ. Отладка
Отладка. Написание надежных программ. Искусство и средства отладки. Панель отладки и команды меню. Окна наблюдения: Locals, Immediate и Watch. Объект Debug и его методы Print и Assert. Доказательство правильности программ. Условная компиляция и отладка. Директива #const. #If … Then … #Else директива. Ошибки периода выполнения и их обработка. Модель управления ошибками в языке VBA. Оператор On Error. Оператор Resume. Объект Err. Метод Clear. Метод Raise. Класс и обработка ошибок. Обработчики ошибок и вложенные вызовы процедур. Структура обработчика ошибок. Функция CvErr. Оптимизация программ. Приемы оптимизации кода. Объявление переменных. Математические операции. Строковые операции. Циклы.—
Проектирование интерфейса. Меню
Общие объекты Office 2000. Коллекция CommandBars. Свойства и методы коллекции CommandBars .Свойства и методы объекта CommandBar. Коллекция CommandBarControls и ее элементы. О роли интерфейса. Создание собственных и модификация встроенных меню. Немного терминологии. Возможности настройки и изменения системы меню. Создание собственного головного меню. Использование диалогового окна Настройка. Создание меню с помощью VBA. Добавление выпадающих меню. Использование диалогового окна Настройка. Как добавить встроенное меню. Добавление выпадающего меню с помощью VBA. Добавление подменю. Вставка и группировка команд. Добавление встроенной команды с помощью окна Настройка. Добавление собственной команды с помощью окна Настройка. Добавление команд с помощью VBA. Пример построения документа с собственным меню Группировка команд меню. Удаление команд меню. Удаление команды с помощью окна Настройка. Удаление команды с помощью VBA. Как восстановить удаленные встроенные компоненты меню. Изменение меню во время р аботы программы. Вывод собственной панели меню. Динамическое изменение видимости команд меню. Управление доступом к командам меню. Переименование команды меню.—
Проектирование интерфейса. Диалоговые окна
Диалоговые окна и элементы управления. Общие сведения и применение. Встроенные диалоговые окна. Коллекция Dialogs и объект Dialog. Вывод сообщений. Функция MsgBox. Окно ввода данных. Функция InputBox. Создание пользовательских диалоговых окон. Создание страниц и вкладок в диалоговых окнах. Добавление дополнительных элементов управления. Пример создания диалогового окна. Разработка процедур, обрабатывающих события диалогового окна и его устройств. Вызов собственного диалогового окна. Установка начальных значений свойств элементов управления. Использование Me в качестве имени текущего диалогового окна. Модификация управляющих элементов во время работы. Управление доступом к элементу. Перемещение фокуса на элемент управления. Изменение размеров диалогового окна. Проверка корректности данных. Обмен данными с диалоговым окном. Закрытие диалогового окна.—
Проектирование интерфейса. Объекты диалоговых окон
Проектирование интерфейса. Объекты диалоговых окон. Объект UserForm (диалоговое окно), коллекция UserForms (диалоговые окна). Коллекция Controls. Объекты — элементы управления. Перечень основных элементов управления. Общие свойства элементов управления: объект-родитель, имя объекта, значение объекта, расположение объекта, параметры внешнего вида объекта, шрифт, свойства поведения объекта. Другие свойства: CheckBox — флажок (кнопка выбора), ComboBox — комбинированный список, CommandButton — командная кнопка, Frame — рамка (группы), Image — изображение, Label — метка (надпись, статический текст), ListBox — список, MultiPage — набор страниц, OptionButton — кнопка-переключатель, ScrollBar — полоса прокрутки, SpinButton — счетчик, TabStrip — полоса вкладок, TextBox — поле ввода (окно редактирования), ToggleButton — выключатель, Объект DataObject. Перемещение объектов. Как реализовать технику DragAndDrop. События: AddControl (добавился элемент), AfterUpdate (После модификации), BeforeDragOver (Перед завершением перетаскивания), BeforeDropOrPaste (Перед опусканием или вставкой), BeforeUpdate (Перед модификацией), Change (Изменение), Click (Щелчок), DblClick (Двойной щелчок), DropButtonClick (Щелчок кнопки списка), Enter, Exit (Вход, Выход), Error (Ошибка), KeyDown, KeyUp (Клавиша нажата, Клавиша отпущена), KeyPress (Клавиша нажата), Layout (Расположение), MouseDown, MouseUp (Мышь нажата, Мышь отпущена), MouseMove (Мышь движется), RemoveControl (Удаление элемента), Scroll (Прокрутка), SpinDown (Уменьшить счетчик), SpinUp (Увеличить счетчик), Zoom (Расширение). Методы: Add (Добавить), AddItem (Добавить элемент), Clear (Очистить), Copy (Копировать), Cut (Вырезать), DropDown (Вывести список), Move (Сдвинуть), Paste (Вставить), Реализация операций Cut, Copy, Paste в диалоговых окнах, Метод RedoAction (Повторить действие), Remove (Удалить), RemoveItem (Удалить элемент), Repaint (Перерисовать), Scroll (Прокрутить), SetDefaultTabOrder (Установить стандартный порядок обхода), SetFocus (Установить фокус), UndoAction (Отменить действие), реализация операций Undo и Redo в диалоговых окнах и метод ZOrder (Z-упорядочить).—
Файловый ввод-вывод.
Основные виды файлов в Office 2000. Открытие и создание файлов. Закрытие файлов. Запись в файлы последовательного доступа. Чтение файлов последовательного доступа. Ввод-вывод для файлов произвольного доступа и бинарных файлов. Работа с данными переменной длины. Один пример работы с Binary файлом.—
Функция | Описание | Пример |
---|---|---|
Len(str) | Определяет длину строки | Из а=lеn(«Персонажи») следует а=9 |
Left (<строка>, <длина>) | Выделяет из аргумента <строка> указанное количество символов слева | Left(» 1234string», 4) =»1234″ |
Right(<строка>, <длина>) | Выделяет из аргумента <строка> указанное количество символов справа | Right(» 1234string», 6) =»string» |
Mid(<строка>, <старт> [, <длина>]) | Выделяет из аргумента <строка> подстроку с указанным числом символов, начиная с позиции <старт> | Mid («12345678″, 4.3) =»456» |
Mid(<строка>, <старт>) | Выделяется подстрока от позиции <старт> до конца строки | Mid («12345678″, 4) =»45678» |
LTrim (<строка>) | Удаляет пробелы в начале строки | LTrim(» печать») =»печать» |
RTrim (<строка>) | Удаляет пробелы в конце строки | RTrim(«печать «) =»печать» |
Trim (<строка>) | Удаляет пробелы в начале и в конце строки | Trim(» печать «) =»печать» |
InStr([<старт>, ] < строка1>, <строка2> [, <сравнение>]) | Производит поиск подстроки в строке. Возвращает позицию первого вхождения строки <строка2> в строку <строка1>, <старт> — позиция, с которой начинается поиск. Если этот аргумент пропущен, поиск начинается с начала строки | Instr(«C:Temp test.mdb», «Test»)=9 Если искомая строка не находится в указанной строке, функция возвращает 0 |
InStrRev ([<старт>, ] <строка1>, <строка2> [, <сравнение>]) | Ищет подстроку в строке, но начинает поиск с конца строки и возвращает позицию последнего вхождения подстроки. Необязательный аргумент <сравнение> определяет тип сравнения двух строк | |
Replace (<строка>, <строкаПоиск>, <строкаЗамена>) | Позволяет заменить в строке одну подстроку другой. Эта функция ищет все вхождения аргумента <строкаПоиск> в аргументе <строка> и заменяет их на <строкаЗамена> |
VBA — Краткое руководство — it-brain.online
VBA означает V isual B asic для приложений A, языка программирования, управляемого событиями, от Microsoft, который в настоящее время преимущественно используется в офисных приложениях Microsoft, таких как MSExcel, MS-Word и MS-Access.
Он помогает техническим специалистам создавать специализированные приложения и решения для расширения возможностей этих приложений. Преимущество этого средства в том, что вам НЕ НУЖНО установить Visual Basic на наш ПК, однако установка Office неявно поможет в достижении этой цели.
Вы можете использовать VBA во всех офисных версиях, от MS-Office 97 до MS-Office 2013, а также с любой из последних доступных версий. Среди VBA Excel VBA является самым популярным. Преимущество использования VBA в том, что вы можете создавать очень мощные инструменты в MS Excel, используя линейное программирование.
Применение VBA
Вы можете задаться вопросом, зачем использовать VBA в Excel, поскольку MS-Excel сам по себе предоставляет множество встроенных функций. MS-Excel предоставляет только основные встроенные функции, которых может быть недостаточно для выполнения сложных вычислений. При таких обстоятельствах VBA становится наиболее очевидным решением.
Например, очень сложно рассчитать ежемесячное погашение кредита, используя встроенные формулы Excel. Скорее, легко запрограммировать VBA для такого расчета.
Доступ к редактору VBA
В окне Excel нажмите «ALT + F11». Откроется окно VBA, как показано на следующем снимке экрана.
В этой главе вы узнаете, как написать простой макрос шаг за шагом.
Шаг 1. Сначала включите меню «Разработчик» в Excel 20XX. Чтобы сделать то же самое, нажмите Файл → Параметры.
Шаг 2 — Нажмите «Настроить ленту» и выберите «Разработчик». Нажмите «ОК».
Шаг 3 — Лента «Разработчик» появляется в строке меню.
Шаг 4 — Нажмите кнопку «Visual Basic», чтобы открыть редактор VBA.
Шаг 5 — Запустите сценарий, добавив кнопку. Нажмите Вставить → Выберите кнопку.
Шаг 6 — Выполните щелчок правой кнопкой мыши и выберите «Свойства».
Шаг 7 — Измените имя и подпись, как показано на следующем снимке экрана.
Шаг 8 — Теперь дважды нажмите кнопку, и схема подпрограммы отобразится, как показано на следующем снимке экрана.
Шаг 9 — Начните кодирование, просто добавив сообщение.
Private Sub say_helloworld_Click() MsgBox "Hi" End Sub
Шаг 10 — Нажмите кнопку, чтобы выполнить подпроцедуру. Вывод подпроцедуры показан на следующем снимке экрана.
Примечание. В следующих главах мы продемонстрируем использование простой кнопки, как описано в шагах с 1 по 10. Следовательно, важно тщательно понять эту главу.
В этой главе вы познакомитесь с обычно используемой терминологией Excel VBA. Эти термины будут использоваться в следующих модулях, поэтому важно понимать каждый из них.
Модули
Модули — это область, где написан код. Это новая рабочая тетрадь, поэтому никаких модулей нет.
Чтобы вставить модуль, перейдите к Вставка → Модуль. Как только модуль вставлен, «module1» будет создан.
Внутри модулей мы можем написать код VBA, а код написан в процедуре. Процедура / подпроцедура — это серия утверждений VBA, в которых указывается, что делать.
Процедура
Процедуры — это группа операторов, выполняемых как единое целое, которые инструктируют Excel, как выполнять определенную задачу. Выполненная задача может быть очень простой или очень сложной задачей. Однако рекомендуется разбивать сложные процедуры на более мелкие.
Двумя основными типами процедур являются Sub и Function.
функция
Функция — это группа многократно используемого кода, которую можно вызывать в любом месте вашей программы. Это избавляет от необходимости писать один и тот же код снова и снова. Это помогает программистам разделить большую программу на ряд небольших и управляемых функций.
Помимо встроенных функций, VBA позволяет также писать пользовательские функции, а операторы записываются между функцией и конечной функцией .
Подпроцедур
Подпроцедуры работают аналогично функциям. Хотя подпроцедуры НЕ возвращают значение, функции могут возвращать или не возвращать значение. Подпроцедуры МОГУТ быть вызваны без ключевого слова вызова. Подпроцедуры всегда заключены в инструкции Sub и End Sub .
Комментарии используются для документирования логики программы и пользовательской информации, с которой другие программисты могут беспрепятственно работать над тем же кодом в будущем.
Он включает в себя информацию, такую как разработанную, модифицированную, и может также включать встроенную логику. Комментарии игнорируются интерпретатором при исполнении.
Комментарии в VBA обозначаются двумя способами.
Любое утверждение, начинающееся с одинарной кавычки (‘), рассматривается как комментарий. Ниже приведен пример.
' This Script is invoked after successful login ' Written by : TutorialsPoint ' Return Value : True / False
REM This Script is written to Validate the Entered Input REM Modified by : Tutorials point/user2
Функция MsgBox отображает окно сообщения и ждет, когда пользователь нажмет кнопку, а затем действие будет выполнено на основе кнопки, нажатой пользователем.
Синтаксис
MsgBox(prompt[,buttons][,title][,helpfile,context])
Описание параметра
Подсказка — Обязательный параметр. Строка, которая отображается в виде сообщения в диалоговом окне. Максимальная длина подсказки составляет около 1024 символов. Если сообщение распространяется более чем на строку, то строки могут быть разделены с помощью символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
Кнопки — необязательный параметр. Числовое выражение, указывающее тип отображаемых кнопок, стиль используемых значков, идентификатор кнопки по умолчанию и модальность окна сообщения. Если оставить пустым, значение по умолчанию для кнопок будет 0.
Заголовок — необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
Файл справки — необязательный параметр. Строковое выражение, определяющее файл справки, который будет использоваться для предоставления контекстно-зависимой справки для диалогового окна.
Контекст — необязательный параметр. Числовое выражение, обозначающее номер контекста справки, назначенный автором справки для соответствующего раздела справки. Если предоставляется контекст, также должен быть предоставлен файл справки.
Параметр Buttons может принимать любое из следующих значений:
0 vbOKOnly — отображает только кнопку ОК.
1 vbOKCancel — отображает кнопки OK и Отмена.
2 vbAbortRetryIgnore — отображает кнопки отмены, повторной попытки и игнорирования.
3 vbYesNoCancel — отображает кнопки «Да», «Нет» и «Отмена».
4 vBYesNo — отображает кнопки «Да» и «Нет».
5 vbRetryCancel — отображает кнопки «Повторить» и «Отмена».
16 vbCritical — отображает значок критического сообщения.
32 vbQuestion — отображает значок запроса предупреждения.
48 vbExclamation — отображает значок предупреждающего сообщения.
64 vbInformation — отображает значок информационного сообщения.
0 vbDefaultButton1 — первая кнопка по умолчанию.
256 vbDefaultButton2 — вторая кнопка по умолчанию.
512 vbDefaultButton3 — третья кнопка по умолчанию.
768 vbDefaultButton4 — четвертая кнопка по умолчанию.
0 vbApplicationModal Модальное приложение — текущее приложение не будет работать, пока пользователь не ответит на окно сообщения.
4096 vbSystemModal System модальный — все приложения не будут работать, пока пользователь не ответит на окно сообщения.
Вышеуказанные значения логически разделены на четыре группы: Первая группа (от 0 до 5) указывает кнопки, отображаемые в окне сообщения. Вторая группа (16, 32, 48, 64) описывает стиль отображаемого значка, третья группа (0, 256, 512, 768) указывает, какая кнопка должна быть по умолчанию, и четвертая группа (0, 4096). ) определяет модальность окна сообщения.
Возвращаемые значения
Функция MsgBox может возвращать одно из следующих значений, которое можно использовать для определения кнопки, которую пользователь нажал в окне сообщения.
- 1 — vbOK — нажата кнопка ОК
- 2 — vbCancel — Отмена была нажата
- 3 — vbAbort — нажата кнопка «Прервать»
- 4 — vbRetry — повторная попытка была нажата
- 5 — vbIgnore — щелкнули Ignore
- 6 — vbYes — Да нажали
- 7 — vbNo — нет кликали
пример
Function MessageBox_Demo() 'Message Box with just prompt message MsgBox("Welcome") 'Message Box with title, yes no and cancel Butttons int a = MsgBox("Do you like blue color?",3,"Choose options") ' Assume that you press No Button msgbox ("The Value of a is " & a) End Function
Выход
Шаг 1. Указанную выше функцию можно выполнить, нажав кнопку «Выполнить» в окне VBA или вызвав функцию из рабочей таблицы Excel, как показано на следующем снимке экрана.
Шаг 2 — Отображается окно простого сообщения с сообщением «Добро пожаловать» и кнопкой «ОК»
Шаг 3 — После нажатия OK, появляется еще одно диалоговое окно с сообщением вместе с кнопками «да, нет и отмена».
Шаг 4 — После нажатия кнопки «Нет» значение этой кнопки (7) сохраняется в виде целого числа и отображается в виде окна сообщения для пользователя, как показано на следующем снимке экрана. Используя это значение, можно понять, на какую кнопку нажал пользователь.
Функция InputBox предлагает пользователям вводить значения. После ввода значений, если пользователь нажимает кнопку ОК или нажимает клавишу ВВОД на клавиатуре, функция InputBox возвращает текст в текстовое поле. Если пользователь нажмет кнопку «Отмена», функция вернет пустую строку («»).
Синтаксис
InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])
Описание параметра
Подсказка — обязательный параметр. Строка, которая отображается в виде сообщения в диалоговом окне. Максимальная длина подсказки составляет около 1024 символов. Если сообщение распространяется более чем на строку, то строки могут быть разделены с помощью символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
Заголовок — необязательный параметр. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
По умолчанию — необязательный параметр. Текст по умолчанию в текстовом поле, который пользователь хотел бы отобразить.
XPos — необязательный параметр. Положение оси X представляет быстрое расстояние от левой стороны экрана по горизонтали. Если оставить это поле пустым, поле ввода будет горизонтально отцентрировано.
YPos — необязательный параметр. Положение оси Y представляет быстрое расстояние от левой стороны экрана по вертикали. Если оставить это поле пустым, поле ввода будет центрировано вертикально.
Helpfile — необязательный параметр. Строковое выражение, определяющее файл справки, который будет использоваться для предоставления контекстной справки для диалогового окна.
контекст — необязательный параметр. Числовое выражение, обозначающее номер контекста справки, назначенный автором справки для соответствующего раздела справки. Если предоставляется контекст, также должен быть предоставлен файл справки.
пример
Давайте вычислим площадь прямоугольника путем получения значений от пользователя во время выполнения с помощью двух полей ввода (одно для длины и одно для ширины).
Function findArea() Dim Length As Double Dim Width As Double Length = InputBox("Enter Length ", "Enter a Number") Width = InputBox("Enter Width", "Enter a Number") findArea = Length * Width End Function
Выход
Шаг 1 — Чтобы выполнить то же самое, позвоните, используя имя функции, и нажмите Enter, как показано на следующем снимке экрана.
Шаг 2 — После выполнения отображается первое поле ввода (длина). Введите значение в поле ввода.
Шаг 3 — После ввода первого значения отображается второе поле ввода (ширина).
Шаг 4 — После ввода второго числа нажмите кнопку ОК. Область отображается, как показано на следующем снимке экрана.
Переменная — это именованная ячейка памяти, используемая для хранения значения, которое можно изменить во время выполнения скрипта. Ниже приведены основные правила именования переменных.
Вы должны использовать букву в качестве первого символа.
Вы не можете использовать пробел, точку (.), Восклицательный знак (!) Или символы @, &, $, # в имени.
Длина имени не может превышать 255 символов.
Вы не можете использовать зарезервированные ключевые слова Visual Basic в качестве имени переменной.
Синтаксис
В VBA вам необходимо объявить переменные перед их использованием.
Dim <<variable_name>> As <<variable_type>>
Типы данных
Существует много типов данных VBA, которые можно разделить на две основные категории, а именно числовые и нечисловые типы данных.
Числовые типы данных
В следующей таблице приведены числовые типы данных и допустимый диапазон значений.
Тип | Диапазон значений |
---|---|
Байт | От 0 до 255 |
целое число | От -32 768 до 32 767 |
Длинная | От -2 147 483 648 до 2 147 483 648 |
не замужем | -3.402823E + 38 до -1.401298E-45 для отрицательных значений От 1.401298E-45 до 3.402823E + 38 для положительных значений. |
двойной | -1,79769313486232e + 308 до -4,94065645841247E-324 для отрицательных значений 4.94065645841247E-324 до 1.79769313486232e + 308 для положительных значений. |
валюта | От -922,337,203,685,477.5808 до 922,337,203,685,477.5807 |
Десятичная дробь | +/- 79,228,162,514,264,337,593,543,950,335, если не используется десятичная дробь +/- 7,9228162514264337593543950335 (28 знаков после запятой). |
Нечисловые типы данных
В следующей таблице приведены нечисловые типы данных и допустимый диапазон значений.
Тип | Диапазон значений |
---|---|
Строка (фиксированная длина) | От 1 до 65 400 знаков |
Строка (переменной длины) | От 0 до 2 миллиардов символов |
Дата | С 1 января 100 по 31 декабря 9999 |
логический | Правда или ложь |
объект | Любой вложенный объект |
Вариант (числовой) | Любое значение до двойного |
Вариант (текст) | То же, что и строка переменной длины |
пример
Давайте создадим кнопку и назовем ее «Variables_demo», чтобы продемонстрировать использование переменных.
Private Sub say_helloworld_Click() Dim password As String password = "Admin#1" Dim num As Integer num = 1234 Dim BirthDay As Date BirthDay = DateValue("30 / 10 / 2020") MsgBox "Passowrd is " & password & Chr(10) & "Value of num is " & num & Chr(10) & "Value of Birthday is " & BirthDay End Sub
Выход
После выполнения сценария выходные данные будут такими, как показано на следующем снимке экрана.
Константа — это именованная область памяти, используемая для хранения значения, которое НЕ МОЖЕТ быть изменено во время выполнения скрипта. Если пользователь пытается изменить значение константы, выполнение скрипта заканчивается ошибкой. Константы объявляются так же, как и переменные.
Ниже приведены правила именования констант.
Вы должны использовать букву в качестве первого символа.
Вы не можете использовать пробел, точку (.), Восклицательный знак (!) Или символы @, &, $, # в имени.
Длина имени не может превышать 255 символов.
Вы не можете использовать зарезервированные ключевые слова Visual Basic в качестве имени переменной.
Синтаксис
В VBA нам нужно присвоить значение объявленным константам. Выдается ошибка, если мы пытаемся изменить значение константы.
Const <<constant_name>> As <<constant_type>> = <<constant_value>>
пример
Давайте создадим кнопку «Constant_demo», чтобы продемонстрировать, как работать с константами.
Private Sub Constant_demo_Click() Const MyInteger As Integer = 42 Const myDate As Date = #2/2/2020# Const myDay As String = "Sunday" MsgBox "Integer is " & MyInteger & Chr(10) & "myDate is " & myDate & Chr(10) & "myDay is " & myDay End Sub
Выход
После выполнения сценария выходные данные будут отображаться, как показано на следующем снимке экрана.
Оператор может быть определен с помощью простого выражения — 4 + 5 равно 9. Здесь 4 и 5 называются операндами, а + — операторами . VBA поддерживает следующие типы операторов —
- Арифметические Операторы
- Операторы сравнения
- Логические (или реляционные) операторы
- Операторы конкатенации
Арифматические операторы
Следующие арифметические операторы поддерживаются VBA.
Предположим, что переменная A содержит 5, а переменная B содержит 10, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
+ | Добавляет два операнда | А + Б даст 15 |
— | Вычитает второй операнд из первого | А — Б даст -5 |
* | Умножает оба операнда | А * Б даст 50 |
/ | Делит числитель на знаменатель | Б / у даст 2 |
% | Оператор модуля и остаток после целочисленного деления | B% A даст 0 |
^ | Оператор экспонирования | B ^ A даст 100000 |
Операторы сравнения
В VBA поддерживаются следующие операторы сравнения.
Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
знак равно | Проверяет, равны ли значения двух операндов или нет. Если да, то условие верно. | (A = B) является ложным. |
<> | Проверяет, равны ли значения двух операндов или нет. Если значения не равны, то условие выполняется. | (A <> B) верно. |
> | Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, то условие верно. | (A> B) Неверно. |
< | Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, то условие верно. | (A <B) верно. |
> = | Проверяет, больше ли значение левого операнда или равно значению правого операнда. Если да, то условие верно. | (A> = B) является ложным. |
<= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда. Если да, то условие верно. | (A <= B) верно. |
Логические операторы
Следующие логические операторы поддерживаются VBA.
Предположим, что переменная A содержит 10, а переменная B содержит 0, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
И | Вызывается логическим и оператором. Если оба условия истинны, то выражение истинно. | a <> 0 И b <> 0 — Ложь. |
ИЛИ | Вызывается оператор логического ИЛИ. Если любое из двух условий истинно, то условие истинно. | a <> 0 ИЛИ b <> 0 верно. |
НЕ | Вызывается логическим оператором НЕ. Используется для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. | НЕ (a <> 0 ИЛИ b <> 0) ложно. |
XOR | Называется логическим исключением. Это комбинация оператора NOT и OR. Если одно и только одно из выражений оценивается как Истина, результатом является Истина. | (a <> 0 XOR b <> 0) верно. |
Операторы конкатенации
Следующие операторы конкатенации поддерживаются VBA.
Предположим, что переменная A содержит 5, а переменная B содержит 10, тогда —
Показать примеры
оператор | Описание | пример |
---|---|---|
+ | Добавляет два значения в качестве переменной. Значения числовые | А + Б даст 15 |
& | Объединяет два значения | А & Б даст 510 |
Предположим, переменная A = «Microsoft» и переменная B = «VBScript», тогда —
оператор | Описание | пример |
---|---|---|
+ | Объединяет два значения | A + B даст MicrosoftVBScript |
& | Объединяет два значения | A & B предоставит MicrosoftVBScript |
Примечание. Операторы конкатенации могут использоваться как для чисел, так и для строк. Вывод зависит от контекста, если переменные содержат числовое значение или строковое значение.
Принятие решений позволяет программистам контролировать ход выполнения скрипта или одного из его разделов. Выполнение регулируется одним или несколькими условными утверждениями.
Ниже приводится общая форма типичной структуры принятия решений, встречающейся в большинстве языков программирования.
VBA предоставляет следующие типы заявлений о принятии решений. Нажмите на следующие ссылки, чтобы проверить их детали.
Sr.No. | Заявление и описание |
---|---|
1 | если заявление Оператор if состоит из логического выражения, за которым следует одно или несколько операторов. |
2 | если .. еще заявление Оператор if else состоит из логического выражения, за которым следует одно или несколько операторов. Если условие истинно, выполняются операторы из операторов If . Если условие ложно, выполняется другая часть сценария. |
3 | если … еще одно заявление Оператор if, сопровождаемый одним или несколькими операторами ElseIf , который состоит из логических выражений, а затем сопровождается необязательным оператором else , который выполняется, когда все условия становятся ложными. |
4 | вложенные операторы if Оператор if или elseif внутри другого оператора if или elseif . |
5 | сменить заявление Оператор switch позволяет проверять переменную на соответствие списку значений. |
Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз. В общем случае операторы выполняются последовательно: первый оператор в функции выполняется первым, затем второй и так далее.
Языки программирования предоставляют различные структуры управления, которые допускают более сложные пути выполнения.
Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз. Ниже приводится общая форма оператора цикла в VBA.
VBA предоставляет следующие типы циклов для обработки требований циклов. Нажмите на следующие ссылки, чтобы проверить их детали.
Sr.No. | Тип и описание петли |
---|---|
1 | для цикла Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла. |
2 | для каждого цикла Это выполняется, если в группе есть хотя бы один элемент, и повторяется для каждого элемента в группе. |
3 | пока .. венд петля Это проверяет условие перед выполнением тела цикла. |
4 | сделай .. пока петли Операторы do..While будут выполняться до тех пор, пока условие истинно. (Т. Е.) Цикл должен повторяться до тех пор, пока условие не станет ложным. |
5 | делать .. до петель Операторы do..Until будут выполняться до тех пор, пока условие ложно. (Т. Е.) Цикл должен повторяться до тех пор, пока условие не станет истинным. |
Заявления о контроле цикла
Операторы управления циклом изменяют выполнение от его нормальной последовательности. Когда выполнение выходит из области видимости, все остальные операторы в цикле НЕ выполняются.
VBA поддерживает следующие операторы управления. Нажмите на следующие ссылки, чтобы проверить их детали.
S.No. | Контрольное заявление и описание |
---|---|
1 | Выход для выписки Завершает оператор цикла For и передает выполнение в оператор, следующий сразу за циклом |
2 | Выйти Do заявление Завершает оператор Do While и переносит выполнение в оператор сразу после цикла |
Строки — это последовательность символов, которая может состоять из букв, цифр, специальных символов или всех из них. Переменная называется строкой, если она заключена в двойные кавычки «».
Синтаксис
variablename = "string"
Примеры
str1 = "string" ' Only Alphabets str2 = "132.45" ' Only Numbers str3 = "[email protected]#$;*" ' Only Special Characters Str4 = "[email protected]#" ' Has all the above
Строковые функции
Существуют предопределенные функции VBA String, которые помогают разработчикам очень эффективно работать со строками. Ниже приведены строковые методы, которые поддерживаются в VBA. Пожалуйста, нажмите на каждый из методов, чтобы узнать подробно.
Sr.No. | Название и описание функции |
---|---|
1 | InStr Возвращает первое вхождение указанной подстроки. Поиск происходит слева направо. |
2 | InStrRev Возвращает первое вхождение указанной подстроки. Поиск происходит справа налево. |
3 | LCASE Возвращает нижний регистр указанной строки. |
4 | UCase Возвращает верхний регистр указанной строки. |
5 | Осталось Возвращает определенное количество символов с левой стороны строки. |
6 | Правильно Возвращает определенное количество символов с правой стороны строки. |
7 | средний Возвращает определенное количество символов из строки на основе указанных параметров. |
8 | LTrim Возвращает строку после удаления пробелов в левой части указанной строки. |
9 | RTrim Возвращает строку после удаления пробелов с правой стороны указанной строки. |
10 | Отделка Возвращает строковое значение после удаления начального и конечного пробелов. |
11 | Len Возвращает длину указанной строки. |
12 | замещать Возвращает строку после замены строки другой строкой. |
13 | Космос Заполняет строку указанным количеством пробелов. |
14 | StrComp Возвращает целочисленное значение после сравнения двух указанных строк. |
15 | строка Возвращает строку с указанным символом указанное количество раз. |
16 | StrReverse Возвращает строку после изменения последовательности символов данной строки. |
Функции даты и времени VBScript помогают разработчикам преобразовывать дату и время из одного формата в другой или выражать значение даты или времени в формате, который соответствует определенному условию.
Функции даты
Sr.No. | Описание функции |
---|---|
1 | Дата Функция, которая возвращает текущую системную дату. |
2 | CDate Функция, которая преобразует данный вход в дату. |
3 | DateAdd Функция, которая возвращает дату, к которой был добавлен указанный интервал времени. |
4 | DateDiff Функция, которая возвращает разницу между двумя периодами времени. |
5 | DatePart Функция, которая возвращает указанную часть заданного значения даты ввода. |
6 | DateSerial Функция, которая возвращает действительную дату для данного года, месяца и даты. |
7 | FormatDateTime Функция, которая форматирует дату на основе предоставленных параметров. |
8 | IsDate Функция, которая возвращает логическое значение независимо от того, является ли предоставленный параметр датой. |
9 | День Функция, которая возвращает целое число от 1 до 31, представляющее день указанной даты. |
10 | Месяц Функция, которая возвращает целое число от 1 до 12, представляющее месяц указанной даты. |
11 | Год Функция, которая возвращает целое число, представляющее год указанной даты. |
12 | MonthName Функция, которая возвращает имя определенного месяца для указанной даты. |
13 | WeekDay Функция, которая возвращает целое число (от 1 до 7), которое представляет день недели для указанного дня. |
14 | WeekDayName Функция, которая возвращает название дня недели для указанного дня. |
Функции времени
Sr.No. | Описание функции |
---|---|
1 | Сейчас Функция, которая возвращает текущую системную дату и время. |
2 | Час Функция, которая возвращает целое число от 0 до 23, представляющее часовую часть заданного времени. |
3 | минут Функция, которая возвращает целое число от 0 до 59, которое представляет часть минут данного времени. |
4 | второй Функция, которая возвращает целое число от 0 до 59, которое представляет часть секунд данного времени. |
5 | Время Функция, которая возвращает текущее системное время. |
6 | таймер Функция, которая возвращает количество секунд и миллисекунд с 12:00. |
7 | TimeSerial Функция, которая возвращает время для конкретного ввода часов, минут и секунд. |
8 | TimeValue Функция, которая преобразует входную строку в формат времени. |
Мы очень хорошо знаем, что переменная является контейнером для хранения значения. Иногда разработчики могут одновременно хранить более одного значения в одной переменной. Когда ряд значений хранится в одной переменной, она называется переменной массива .
Декларация массива
Массивы объявляются так же, как и переменная, за исключением того, что объявление переменной массива использует круглые скобки. В следующем примере размер массива указан в скобках.
'Method 1 : Using Dim Dim arr1() 'Without Size 'Method 2 : Mentioning the Size Dim arr2(5) 'Declared with size of 5 'Method 3 : using 'Array' Parameter Dim arr3 arr3 = Array("apple","Orange","Grapes")
Хотя размер массива указан как 5, он может содержать 6 значений, так как индекс массива начинается с нуля.
Индекс массива не может быть отрицательным.
Массивы VBScript могут хранить переменные любого типа в массиве. Следовательно, массив может хранить целое число, строку или символы в одной переменной массива.
Присвоение значений массиву
Значения присваиваются массиву путем указания значения индекса массива для каждого из назначаемых значений. Это может быть строка.
пример
Добавьте кнопку и добавьте следующую функцию.
Private Sub Constant_demo_Click() Dim arr(5) arr(0) = "1" 'Number as String arr(1) = "VBScript" 'String arr(2) = 100 'Number arr(3) = 2.45 'Decimal Number arr(4) = #10/07/2013# 'Date arr(5) = #12.45 PM# 'Time msgbox("Value stored in Array index 0 : " & arr(0)) msgbox("Value stored in Array index 1 : " & arr(1)) msgbox("Value stored in Array index 2 : " & arr(2)) msgbox("Value stored in Array index 3 : " & arr(3)) msgbox("Value stored in Array index 4 : " & arr(4)) msgbox("Value stored in Array index 5 : " & arr(5)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Value stored in Array index 0 : 1 Value stored in Array index 1 : VBScript Value stored in Array index 2 : 100 Value stored in Array index 3 : 2.45 Value stored in Array index 4 : 7/10/2013 Value stored in Array index 5 : 12:45:00 PM
Многомерные массивы
Массивы не ограничиваются одним измерением, однако могут иметь максимум 60 измерений. Двумерные массивы являются наиболее часто используемыми.
пример
В следующем примере объявляется многомерный массив с 3 строками и 4 столбцами.
Private Sub Constant_demo_Click() Dim arr(2,3) as Variant ' Which has 3 rows and 4 columns arr(0,0) = "Apple" arr(0,1) = "Orange" arr(0,2) = "Grapes" arr(0,3) = "pineapple" arr(1,0) = "cucumber" arr(1,1) = "beans" arr(1,2) = "carrot" arr(1,3) = "tomato" arr(2,0) = "potato" arr(2,1) = "sandwitch" arr(2,2) = "coffee" arr(2,3) = "nuts" msgbox("Value in Array index 0,1 : " & arr(0,1)) msgbox("Value in Array index 2,2 : " & arr(2,2)) End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Value stored in Array index : 0 , 1 : Orange Value stored in Array index : 2 , 2 : coffee
ReDim Заявление
Оператор ReDim используется для объявления переменных динамического массива и выделения или перераспределения пространства хранения.
Синтаксис
ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Описание параметра
Сохранять — необязательный параметр, используемый для сохранения данных в существующем массиве при изменении размера последнего измерения.
Varname — обязательный параметр, который обозначает имя переменной, которое должно соответствовать стандартным соглашениям об именах переменных.
Subscripts — обязательный параметр, который указывает размер массива.
пример
В следующем примере массив был переопределен, а затем значения сохранены при изменении существующего размера массива.
Примечание. При изменении размера массива, меньшего, чем он был изначально, данные в удаленных элементах будут потеряны.
Private Sub Constant_demo_Click() Dim a() as variant i = 0 redim a(5) a(0) = "XYZ" a(1) = 41.25 a(2) = 22 REDIM PRESERVE a(7) For i = 3 to 7 a(i) = i Next 'to Fetch the output For i = 0 to ubound(a) Msgbox a(i) Next End Sub
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
XYZ 41.25 22 3 4 5 6 7
Методы массива
В VBScript есть различные встроенные функции, которые помогают разработчикам эффективно обрабатывать массивы. Все методы, которые используются в сочетании с массивами, перечислены ниже. Пожалуйста, нажмите на название метода, чтобы узнать о нем подробно.
Sr.No. | Описание функции |
---|---|
1 | LBound Функция, которая возвращает целое число, соответствующее наименьшему нижнему индексу из указанных массивов. |
2 | UBound Функция, которая возвращает целое число, соответствующее наибольшему нижнему индексу заданных массивов. |
3 | Трещина Функция, которая возвращает массив, который содержит указанное количество значений. Разделить на основе разделителя. |
4 | Присоединиться Функция, которая возвращает строку, которая содержит указанное количество подстрок в массиве. Это прямо противоположная функция метода разделения. |
5 | Фильтр Функция, которая возвращает массив с нулями, который содержит подмножество массива строк на основе определенных критериев фильтра. |
6 | IsArray Функция, которая возвращает логическое значение, указывающее, является ли входная переменная массивом. |
7 | Erase Функция, которая восстанавливает выделенную память для переменных массива. |
Функция — это группа многократно используемого кода, который можно вызывать в любом месте вашей программы. Это избавляет от необходимости писать один и тот же код снова и снова. Это позволяет программистам разделить большую программу на ряд небольших и управляемых функций.
Помимо встроенных функций, VBA позволяет также писать пользовательские функции. В этой главе вы узнаете, как писать свои собственные функции в VBA.
Определение функции
Функция VBA может иметь необязательный оператор возврата. Это необходимо, если вы хотите вернуть значение из функции.
Например, вы можете передать два числа в функцию, а затем ожидать от функции возврата их умножения в вызывающей программе.
Примечание . Функция может возвращать несколько значений, разделенных запятой в виде массива, назначенного имени функции.
Прежде чем использовать функцию, нам нужно определить эту конкретную функцию. Наиболее распространенный способ определения функции в VBA — использование ключевого слова Function , за которым следует уникальное имя функции, которое может содержать или не содержать список параметров и оператор с ключевым словом End Function , который указывает конец функции. Ниже приведен основной синтаксис.
Синтаксис
Добавьте кнопку и добавьте следующую функцию.
Function Functionname(parameter-list) statement 1 statement 2 statement 3 ....... statement n End Function
пример
Добавьте следующую функцию, которая возвращает область. Обратите внимание, что значение / значения могут быть возвращены с самим именем функции.
Function findArea(Length As Double, Optional Width As Variant) If IsMissing(Width) Then findArea = Length * Length Else findArea = Length * Width End If End Function
Вызов функции
Чтобы вызвать функцию, вызовите функцию, используя имя функции, как показано на следующем снимке экрана.
Вывод области, как показано ниже, будет отображаться пользователю.
Подпроцедуры похожи на функции, однако есть несколько отличий.
Подпроцедуры НЕ возвращают значение, в то время как функции могут возвращать или не возвращать значение.
Подпроцедуры МОГУТ быть вызваны без ключевого слова вызова.
Подпроцедуры всегда заключены в инструкции Sub и End Sub.
пример
Sub Area(x As Double, y As Double) MsgBox x * y End Sub
Процедуры вызова
Чтобы вызвать процедуру где-нибудь в скрипте, вы можете сделать вызов из функции. Мы не сможем использовать тот же способ, что и для функции, так как подпроцедура НЕ возвратит значение.
Function findArea(Length As Double, Width As Variant) area Length, Width ' To Calculate Area 'area' sub proc is called End Function
Теперь вы сможете вызывать только функцию, но не процедуру, как показано на следующем снимке экрана.
Площадь рассчитывается и отображается только в окне сообщения.
В ячейке результата отображается НОЛЬ, так как значение области НЕ возвращается из функции. Короче говоря, вы не можете сделать прямой вызов подпроцедуры из листа Excel.
VBA, программирование, управляемое событиями, может быть запущено при изменении ячейки или диапазона значений ячейки вручную. Изменение события может упростить задачу, но вы можете очень быстро завершить страницу, полную форматирования. Есть два вида событий.
- События рабочего листа
- Рабочая тетрадь События
События рабочего листа
События рабочего листа запускаются при изменении рабочего листа. Он создается путем щелчка правой кнопкой мыши на вкладке листа и выбора «просмотра кода», а затем вставки кода.
Пользователь может выбрать каждый из этих рабочих листов и выбрать «Рабочий лист» из выпадающего списка, чтобы получить список всех поддерживаемых событий рабочего листа.
Ниже приведены поддерживаемые события рабочего листа, которые могут быть добавлены пользователем.
Private Sub Worksheet_Activate() Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Private Sub Worksheet_Calculate() Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_Deactivate() Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Private Sub Worksheet_SelectionChange(ByVal Target As Range)
пример
Допустим, нам просто нужно отобразить сообщение перед двойным щелчком.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "Before Double Click" End Sub
Выход
При двойном щелчке по любой ячейке пользователю отображается окно сообщения, как показано на следующем снимке экрана.
Рабочая тетрадь События
События рабочей книги инициируются, когда происходит изменение рабочей книги в целом. Мы можем добавить код для событий рабочей книги, выбрав «ThisWorkbook» и выбрав «рабочая книга» из выпадающего списка, как показано на следующем снимке экрана. Немедленно подпрограмма Workbook_open отображается пользователю, как показано на следующем снимке экрана.
Ниже приведены поддерживаемые события Workbook, которые могут быть добавлены пользователем.
Private Sub Workbook_AddinUninstall() Private Sub Workbook_BeforeClose(Cancel As Boolean) Private Sub Workbook_BeforePrint(Cancel As Boolean) Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Private Sub Workbook_Deactivate() Private Sub Workbook_NewSheet(ByVal Sh As Object) Private Sub Workbook_Open() Private Sub Workbook_SheetActivate(ByVal Sh As Object) Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Private Sub Workbook_WindowActivate(ByVal Wn As Window) Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) Private Sub Workbook_WindowResize(ByVal Wn As Window)
пример
Допустим, нам просто нужно отобразить пользователю сообщение о том, что новый лист успешно создан, каждый раз, когда создается новый лист.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "New Sheet Created Successfully" End Sub
Выход
После создания нового листа Excel пользователю отображается сообщение, как показано на следующем снимке экрана.
Существует три типа ошибок в программировании: (a) синтаксические ошибки, (b) ошибки времени выполнения и (c) логические ошибки.
Синтаксические ошибки
Синтаксические ошибки, также называемые ошибками синтаксического анализа, возникают во время интерпретации VBScript. Например, следующая строка вызывает синтаксическую ошибку, потому что отсутствует закрывающая скобка.
Function ErrorHanlding_Demo() dim x,y x = "Tutorialspoint" y = Ucase(x End Function
Ошибки во время выполнения
Ошибки во время выполнения, также называемые исключениями, возникают во время выполнения после интерпретации.
Например, следующая строка вызывает ошибку во время выполнения, потому что здесь синтаксис правильный, но во время выполнения он пытается вызвать fnmultiply, который является несуществующей функцией.
Function ErrorHanlding_Demo1() Dim x,y x = 10 y = 20 z = fnadd(x,y) a = fnmultiply(x,y) End Function Function fnadd(x,y) fnadd = x + y End Function
Логические ошибки
Логические ошибки могут быть наиболее сложным типом ошибок для отслеживания. Эти ошибки не являются результатом синтаксиса или ошибки времени выполнения. Вместо этого они возникают, когда вы совершаете ошибку в логике, управляющей вашим сценарием, и вы не получаете ожидаемого результата.
Вы не можете поймать эти ошибки, потому что это зависит от требований вашего бизнеса, какую логику вы хотите использовать в своей программе.
Например, деление числа на ноль или написанный скрипт, который входит в бесконечный цикл.
Err Object
Предположим, если у нас есть ошибка во время выполнения, тогда выполнение останавливается, отображая сообщение об ошибке. Как разработчик, если мы хотим зафиксировать ошибку, то используется Error Object.
пример
В следующем примере Err.Number дает номер ошибки, а Err.Description — описание ошибки.
Err.Raise 6 ' Raise an overflow error. MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description Err.Clear ' Clear the error.
Обработка ошибок
VBA включает подпрограмму обработки ошибок, а также может использоваться для отключения подпрограммы обработки ошибок. Без оператора On Error любая ошибка во время выполнения является фатальной: отображается сообщение об ошибке, и выполнение резко останавливается.
On Error { GoTo [ line | 0 | -1 ] | Resume Next }
Sr.No. | Ключевое слово и описание |
---|---|
1 | Линия GoTo Включает процедуру обработки ошибок, которая начинается со строки, указанной в требуемом аргументе строки. Указанная строка должна быть в той же процедуре, что и оператор On Error, иначе произойдет ошибка времени компиляции. |
2 | Перейти 0 Отключает включенный обработчик ошибок в текущей процедуре и сбрасывает его в Nothing. |
3 | GoTo -1 Отключает включенное исключение в текущей процедуре и сбрасывает его в Nothing. |
4 | Продолжить дальше Указывает, что при возникновении ошибки во время выполнения элемент управления переходит к оператору, который следует сразу за оператором, в котором произошла ошибка, и выполнение продолжается с этой точки. |
пример
Public Sub OnErrorDemo() On Error GoTo ErrorHandler ' Enable error-handling routine. Dim x, y, z As Integer x = 50 y = 0 z = x / y ' Divide by ZERO Error Raises ErrorHandler: ' Error-handling routine. Select Case Err.Number ' Evaluate error number. Case 10 ' Divide by zero error MsgBox ("You attempted to divide by zero!") Case Else MsgBox "UNKNOWN ERROR - Error# " & Err.Number & " : " & Err.Description End Select Resume Next End Sub
При программировании с использованием VBA есть несколько важных объектов, с которыми пользователь будет иметь дело.
- Объекты приложения
- Объекты рабочей книги
- Объекты рабочего листа
- Диапазон объектов
Объекты приложения
Объект Application состоит из следующих элементов:
- Общие для приложения настройки и параметры.
- Методы, которые возвращают объекты верхнего уровня, такие как ActiveCell, ActiveSheet и т. Д.
пример
'Example 1 : Set xlapp = CreateObject("Excel.Sheet") xlapp.Application.Workbooks.Open "C:\test.xls" 'Example 2 : Application.Windows("test.xls").Activate 'Example 3: Application.ActiveCell.Font.Bold = True
Объекты рабочей книги
Объект Workbook является членом коллекции Workbooks и содержит все объекты Workbook, открытые в настоящее время в Microsoft Excel.
пример
'Ex 1 : To close Workbooks Workbooks.Close 'Ex 2 : To Add an Empty Work Book Workbooks.Add 'Ex 3: To Open a Workbook Workbooks.Open FileName:="Test.xls", ReadOnly:=True 'Ex : 4 - To Activate WorkBooks Workbooks("Test.xls").Worksheets("Sheet1").Activate
Объекты рабочего листа
Объект Worksheet является членом коллекции Worksheets и содержит все объекты Worksheet в рабочей книге.
пример
'Ex 1 : To make it Invisible Worksheets(1).Visible = False 'Ex 2 : To protect an WorkSheet Worksheets("Sheet1").Protect password:=strPassword, scenarios:=True
Диапазон объектов
Объекты Range представляют ячейку, строку, столбец или выборку ячеек, содержащих один или несколько непрерывных блоков ячеек.
'Ex 1 : To Put a value in the cell A5 Worksheets("Sheet1").Range("A5").Value = "5235" 'Ex 2 : To put a value in range of Cells Worksheets("Sheet1").Range("A1:A4").Value = 5
Вы также можете прочитать файл Excel и записать содержимое ячейки в текстовый файл с помощью VBA. VBA позволяет пользователям работать с текстовыми файлами двумя способами:
- Объект файловой системы
- используя команду записи
Объект файловой системы (FSO)
Как следует из названия, FSO помогают разработчикам работать с дисками, папками и файлами. В этом разделе мы обсудим, как использовать FSO.
Sr.No. | Тип объекта и описание |
---|---|
1 | Водить машину Драйв — это объект. Содержит методы и свойства, которые позволяют собирать информацию о диске, подключенном к системе. |
2 | приводы Диски это коллекция. Он предоставляет список дисков, подключенных к системе, физически или логически. |
3 | файл Файл является объектом. Он содержит методы и свойства, которые позволяют разработчикам создавать, удалять или перемещать файл. |
4 | файлы Файлы это коллекция. Он предоставляет список всех файлов, содержащихся в папке. |
5 | скоросшиватель Папка — это объект. Он предоставляет методы и свойства, которые позволяют разработчикам создавать, удалять или перемещать папки. |
6 | Папки Папки это коллекция. Он предоставляет список всех папок в папке. |
7 | TextStream TextStream — это объект. Это позволяет разработчикам читать и писать текстовые файлы. |
Водить машину
Диск — это объект, который обеспечивает доступ к свойствам определенного диска или общей сетевой папки. Следующие свойства поддерживаются объектом Drive —
- Доступное пространство
- DriveLetter
- Тип вождения
- Файловая система
- Свободное место
- Готово
- Путь
- Корневая папка
- Серийный номер
- ShareName
- Общий размер
- VolumeName
пример
Шаг 1. Прежде чем приступить к написанию сценариев с использованием FSO, мы должны включить Microsoft Scripting Runtime. Чтобы сделать то же самое, перейдите в Инструменты → Ссылки, как показано на следующем снимке экрана.
Шаг 2. Добавьте «Microsoft Scripting RunTime» и нажмите «ОК».
Шаг 3 — Добавьте данные, которые вы хотели бы записать в текстовый файл и добавьте командную кнопку.
Шаг 4 — Теперь пришло время написать сценарий.
Private Sub fn_write_to_text_Click() Dim FilePath As String Dim CellData As String Dim LastCol As Long Dim LastRow As Long Dim fso As FileSystemObject Set fso = New FileSystemObject Dim stream As TextStream LastCol = ActiveSheet.UsedRange.Columns.Count LastRow = ActiveSheet.UsedRange.Rows.Count ' Create a TextStream. Set stream = fso.OpenTextFile("D:\Try\Support.log", ForWriting, True) CellData = "" For i = 1 To LastRow For j = 1 To LastCol CellData = Trim(ActiveCell(i, j).Value) stream.WriteLine "The Value at location (" & i & "," & j & ")" & CellData Next j Next i stream.Close MsgBox ("Job Done") End Sub
Выход
При выполнении сценария убедитесь, что курсор помещен в первую ячейку рабочего листа. Файл Support.log создается, как показано на следующем снимке экрана в разделе «D: \ Try».
Содержимое файла показано на следующем снимке экрана.
Написать команду
В отличие от FSO, нам НЕ нужно добавлять ссылки, однако мы НЕ сможем работать с дисками, файлами и папками. Мы сможем просто добавить поток в текстовый файл.
пример
Private Sub fn_write_to_text_Click() Dim FilePath As String Dim CellData As String Dim LastCol As Long Dim LastRow As Long LastCol = ActiveSheet.UsedRange.Columns.Count LastRow = ActiveSheet.UsedRange.Rows.Count FilePath = "D:\Try\write.txt" Open FilePath For Output As #2 CellData = "" For i = 1 To LastRow For j = 1 To LastCol CellData = "The Value at location (" & i & "," & j & ")" & Trim(ActiveCell(i, j).Value) Write #2, CellData Next j Next i Close #2 MsgBox ("Job Done") End Sub
Выход
После выполнения сценария файл «write.txt» создается в папке «D: \ Try», как показано на следующем снимке экрана.
Содержимое файла показано на следующем снимке экрана.
Используя VBA, вы можете создавать графики на основе определенных критериев. Давайте посмотрим на это на примере.
Шаг 1 — Введите данные, по которым должен быть сгенерирован график.
Шаг 2. Создайте 3 кнопки — одну для создания гистограммы, другую для создания круговой диаграммы и другую для создания столбчатой диаграммы.
Шаг 3 — Разработайте макрос, чтобы сгенерировать каждый из этих типов диаграмм.
' Procedure to Generate Pie Chart Private Sub fn_generate_pie_graph_Click() Dim cht As ChartObject For Each cht In Worksheets(1).ChartObjects cht.Chart.Type = xlPie Next cht End Sub ' Procedure to Generate Bar Graph Private Sub fn_Generate_Bar_Graph_Click() Dim cht As ChartObject For Each cht In Worksheets(1).ChartObjects cht.Chart.Type = xlBar Next cht End Sub ' Procedure to Generate Column Graph Private Sub fn_generate_column_graph_Click() Dim cht As ChartObject For Each cht In Worksheets(1).ChartObjects cht.Chart.Type = xlColumn Next cht End Sub
Шаг 4 — При нажатии на соответствующую кнопку создается диаграмма. В следующем выводе нажмите на кнопку «Сгенерировать круговую диаграмму».
Форма пользователя — это настраиваемое диалоговое окно, которое делает ввод пользовательских данных более управляемым и более простым в использовании для пользователя. В этой главе вы научитесь разрабатывать простую форму и добавлять данные в Excel.
Шаг 1 — Перейдите к окну VBA, нажав Alt + F11 и перейдите к меню «Вставить» и выберите «Форма пользователя». После выбора форма пользователя отображается, как показано на следующем снимке экрана.
Шаг 2 — Разработка форм с использованием заданных элементов управления.
Шаг 3 — После добавления каждого элемента управления, элементы управления должны быть названы. Заголовок соответствует тому, что отображается в форме, а имя соответствует логическому имени, которое будет появляться при написании кода VBA для этого элемента.
Шаг 4 — Ниже приведены имена против каждого из добавленных элементов управления.
контроль | Логическое имя | титр |
---|---|---|
Из | frmempform | Форма сотрудника |
Идентификационная этикетка сотрудника | EmpID | ID сотрудника |
Имя Label Box | Имя | Имя |
фамилия этикетка | фамилия | Фамилия |
Dob Label Box | дата рождения | Дата рождения |
Mailid Label Box | почтовый идентификатор | Электронный идентификатор |
Этикетка для паспорта | Владелец паспорта | Владелец паспорта |
Текстовое поле Emp ID | txtempid | Непригодный |
Имя Текстовое поле | txtfirstname | Непригодный |
Фамилия Текстовое поле | txtlastname | Непригодный |
Текстовое поле идентификатора электронной почты | txtemailid | Непригодный |
Поле со списком даты | cmbdate | Непригодный |
Поле со списком месяцев | cmbmonth | Непригодный |
Поле со списком | cmbyear | Непригодный |
Да радио кнопка | radioyes | да |
Нет радио кнопки | radiono | нет |
Кнопка «Отправить» | btnsubmit | Разместить |
Кнопка Отмена | btncancel | Отмена |
Шаг 5 — Добавьте код для события загрузки формы, выполнив щелчок правой кнопкой мыши на форме и выбрав «Просмотреть код».
Шаг 6 — Выберите «Userform» из выпадающего списка объектов и выберите метод «Initialize», как показано на следующем снимке экрана.
Шаг 7 — После загрузки формы убедитесь, что текстовые поля очищены, раскрывающиеся окна заполнены и переключатели сброшены.
Private Sub UserForm_Initialize() 'Empty Emp ID Text box and Set the Cursor txtempid.Value = "" txtempid.SetFocus 'Empty all other text box fields txtfirstname.Value = "" txtlastname.Value = "" txtemailid.Value = "" 'Clear All Date of Birth Related Fields cmbdate.Clear cmbmonth.Clear cmbyear.Clear 'Fill Date Drop Down box - Takes 1 to 31 With cmbdate .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" .AddItem "13" .AddItem "14" .AddItem "15" .AddItem "16" .AddItem "17" .AddItem "18" .AddItem "19" .AddItem "20" .AddItem "21" .AddItem "22" .AddItem "23" .AddItem "24" .AddItem "25" .AddItem "26" .AddItem "27" .AddItem "28" .AddItem "29" .AddItem "30" .AddItem "31" End With 'Fill Month Drop Down box - Takes Jan to Dec With cmbmonth .AddItem "JAN" .AddItem "FEB" .AddItem "MAR" .AddItem "APR" .AddItem "MAY" .AddItem "JUN" .AddItem "JUL" .AddItem "AUG" .AddItem "SEP" .AddItem "OCT" .AddItem "NOV" .AddItem "DEC" End With 'Fill Year Drop Down box - Takes 1980 to 2014 With cmbyear .AddItem "1980" .AddItem "1981" .AddItem "1982" .AddItem "1983" .AddItem "1984" .AddItem "1985" .AddItem "1986" .AddItem "1987" .AddItem "1988" .AddItem "1989" .AddItem "1990" .AddItem "1991" .AddItem "1992" .AddItem "1993" .AddItem "1994" .AddItem "1995" .AddItem "1996" .AddItem "1997" .AddItem "1998" .AddItem "1999" .AddItem "2000" .AddItem "2001" .AddItem "2002" .AddItem "2003" .AddItem "2004" .AddItem "2005" .AddItem "2006" .AddItem "2007" .AddItem "2008" .AddItem "2009" .AddItem "2010" .AddItem "2011" .AddItem "2012" .AddItem "2013" .AddItem "2014" End With 'Reset Radio Button. Set it to False when form loads. radioyes.Value = False radiono.Value = False End Sub
Шаг 8 — Теперь добавьте код в кнопку «Отправить». Нажав кнопку «Отправить», пользователь сможет добавить значения в таблицу.
Private Sub btnsubmit_Click() Dim emptyRow As Long 'Make Sheet1 active Sheet1.Activate 'Determine emptyRow emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 'Transfer information Cells(emptyRow, 1).Value = txtempid.Value Cells(emptyRow, 2).Value = txtfirstname.Value Cells(emptyRow, 3).Value = txtlastname.Value Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value Cells(emptyRow, 5).Value = txtemailid.Value If radioyes.Value = True Then Cells(emptyRow, 6).Value = "Yes" Else Cells(emptyRow, 6).Value = "No" End If End Sub
Шаг 9 — Добавьте метод, чтобы закрыть форму, когда пользователь нажимает кнопку Отмена.
Private Sub btncancel_Click() Unload Me End Sub
Шаг 10 — Заполните форму, нажав кнопку «Выполнить». Введите значения в форму и нажмите кнопку «Отправить». Автоматически значения будут перетекать в лист, как показано на следующем снимке экрана.
Функция VBA InStrRev — поиск текста справа
В этом руководстве будет показано, как использовать функцию InStrRev VBA для поиска текста справа.
Функция InStrRev
Функция VBA InStrRev ищет позицию подстроки внутри строки. Он возвращает отсчет позиции слева направо, но выполняет поиск от конца строки к началу.
VBA InStrRev Найти подстроку
Функцию VBA InStrRev можно использовать для поиска позиции подстроки внутри строки.
Sub InStrRevExample_1 () MsgBox InStrRev ("ABCABC", "C") 'Результат: 6 MsgBox InStrRev ("ABCABC", "BC") 'Результат: 5 MsgBox InStrRev ("La La Land", "L") 'Результат: 7 MsgBox InStrRev ("La La Land", "La") 'Результат: 7 MsgBox InStrRev ("La La Land", "La") 'Результат: 4 MsgBox InStrRev ("La La Land", "M") 'Результат: 0 Конец подписки
AutoMacro — Генератор кода VBA
Исходное положение VBA InStrRev
VBA InStrRev Функция может начать поиск подстроки с назначенной позиции, считая слева направо.
Sub InStrRevExample_2 () MsgBox InStrRev ("La La Land", "L") 'Результат: 7 MsgBox InStrRev ("La La Land", "L", 8) 'Результат: 7 MsgBox InStrRev ("La La Land", "L", 7) 'Результат: 7 MsgBox InStrRev ("La La Land", "L", 6) 'Результат: 4 MsgBox InStrRev ("La La Land", "L", 4) 'Результат: 4 MsgBox InStrRev ("La La Land", "L", 3) 'Результат: 1 Конец подписки
VBA InStrRev Чувствительность к регистру
Функция VBA InStrRev по умолчанию чувствительна к регистру.Вы можете изменить это поведение на нечувствительность к регистру, используя необязательный параметр. В этом случае вы также должны определить начальную позицию поиска.
Подложка InStrRevExample_3 () 'InstrRev по умолчанию чувствителен к регистру MsgBox InStrRev ("La La Land", "L") 'Результат: 7 MsgBox InStrRev ("La La Land", "l") 'Результат: 0 InstrRev может выполнять поиск без учета регистра MsgBox InStrRev ("La La Land", "L", -1, vbTextCompare) 'Результат: 7 MsgBox InStrRev ("La La Land", "l", -1, vbTextCompare) 'Результат: 7 Конец подписки
VBA InStrRev Последнее пространство
Функция VBA InStrRev может найти позицию последнего пробела в строке.
Sub InStrRevExample_4 () MsgBox InStrRev ("Ла-ла-Лэнд", "") Результат: 6 MsgBox InStrRev ("Леонардо да Винчи", "") Результат: 12 MsgBox InStrRev («Да пребудет с тобой Сила», «») Результат: 22 Конец подписки
VBA InStrRev От второго до последнего места
Функция VBA InStrRev может найти положение предпоследнего пробела в строке. Мы можем использовать функцию VBA InStrRev, чтобы найти последний пробел в строке, а затем мы можем снова использовать InStrRev с новой начальной точкой, чтобы найти позицию от второго до последнего пробела
Sub InStrRevExample_5 () Dim LastPos как целое число LastPos = InStrRev («Да пребудет с тобой Сила», «») Результат MsgBox LastPos: 22 Dim SecondLastPos как целое число SecondLastPos = InStrRev («Да пребудет с тобой Сила», «», LastPos - 1) Результат MsgBox SecondLastPos: 17 'InStrRev начал поиск места незадолго до последнего места 'Он найдет предпоследний пробел, потому что ищет справа налево Конец подписки
VBA InStrRev Имя файла возврата
Функция VBA InStrRev может использоваться для простого возврата имени файла из строки, содержащей путь и имя файла.Мы будем использовать функцию InStrRev с функциями VBA Len и VBA Right.
Функция VBA Len возвращает длину строки:
MsgBox Len ("XBCX") 'Результат: 4
Правая функция VBA возвращает n символов с конца строки:
MsgBox Right ("ABCDE", 2) 'Результат: DE
Мы можем использовать функцию InStrRev, чтобы найти последнее вхождение символа «\» в имени пути, и использовать функцию Len для вычисления длины имени файла. Затем право может извлечь имя файла.
Sub InStrRevExample_4 () Dim PathEx как строка PathEx = "C: \ MyFiles \ Other \ UsefulFile.pdf" Dim FilenameEx как строка FilenameEx = Right (PathEx, Len (PathEx) - InStrRev (PathEx, "\")) MsgBox FilenameEx 'Результат: UsefulFile.pdf 'Давайте разберем этот код MsgBox Len (PathEx) 'Это длина имени пути (31) MsgBox InStrRev (PathEx, "\") 'Это позиция последнего \ в строке MsgBox Len (PathEx) - InStrRev (PathEx, "\") 'Это длина имени файла (14) 'Разница между полной длиной и положением последнего \ в строке '(31-27 = 14) 'Теперь мы знаем длину имени файла и, конечно же, в конце 'Правая функция идеально подходит для этой ситуации FilenameEx = Right (PathEx, Len (PathEx) - InStrRev (PathEx, "\")) Концевой переводник
Функция InStrRev (Visual Basic для приложений)
- 2 минуты на чтение
В этой статье
Возвращает позицию вхождения одной строки в другую, начиная с конца строки.
Синтаксис
InstrRev ( stringcheck , stringmatch , [ start , [ compare ]])
Синтаксис функции InstrRev имеет следующие именованные аргументы:
Деталь | Описание |
---|---|
проверка строки | Обязательно. Ищется строковое выражение. |
соответствие | Обязательно.Ищется строковое выражение. |
начало | Необязательно. Числовое выражение, задающее начальную позицию для каждого поиска. Если опущено, используется -1, что означает, что поиск начинается с позиции последнего символа. Если start содержит Null, возникает ошибка. |
сравнить | Необязательно. Числовое значение, указывающее тип сравнения, который следует использовать при оценке подстрок. Если не указано, выполняется двоичное сравнение.См. Значения в разделе «Настройки». |
Настройки
Аргумент compare может иметь следующие значения:
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | –1 | Выполняет сравнение с использованием настройки оператора Option Compare . |
vbBinary Сравнить | 0 | Выполняет двоичное сравнение. |
vbTextСравнить | 1 | Выполняет текстовое сравнение. |
vbDatabaseCompare | 2 | Только Microsoft Access. Выполняет сравнение на основе информации в вашей базе данных. |
Возвращаемые значения
InStrRev возвращает следующие значения:
Если | InStrRev возвращает |
---|---|
stringcheck имеет нулевую длину | 0 |
stringcheck is Null | Нулевой |
stringmatch имеет нулевую длину | начало |
stringmatch is Null | Нулевой |
соответствие строки не найдено | 0 |
stringmatch находится в пределах stringcheck | Позиция, в которой найдено совпадение |
начало > Len ( stringcheck ) | 0 |
Примечания
Обратите внимание, что синтаксис функции InstrRev отличается от синтаксиса функции Instr .
InstrRev не найдет экземпляр stringmatch , если только позиция конечного символа stringmatch меньше или равна start .
См. Также
Поддержка и отзывы
У вас есть вопросы или отзывы об Office VBA или этой документации? См. Раздел Поддержка и отзывы Office VBA, чтобы узнать, как получить поддержку и оставить отзыв.
Как использовать функцию INSTRREV (VBA)
В этом руководстве Excel объясняется, как использовать функцию INSTRREV в Excel с синтаксисом и примерами.
Описание
Функция Microsoft Excel INSTRREV возвращает позицию первого вхождения строки в другую строку, начиная с конца строки. Это похоже на функцию INSTR, которая возвращает позицию первого вхождения, начиная с начала строки.
Функция INSTRREV — это встроенная функция Excel, относящаяся к категории String / Text Function . Его можно использовать как функцию VBA (VBA) в Excel.В качестве функции VBA вы можете использовать эту функцию в коде макроса, который вводится через редактор Microsoft Visual Basic Editor.
Синтаксис
Синтаксис функции INSTRREV в Microsoft Excel:
InStrRev (строка, подстрока [, начало [, сравнить]])
Параметры или аргументы
- строка
- Строка для поиска.
- подстрока
- Подстрока, которую вы хотите найти.
- начало
- Необязательно.Это начальная позиция для поиска. Если этот параметр опущен, поиск начнется с позиции -1, которая является позицией последнего символа.
- сравнить
Необязательно. Это тип сравнения, который нужно выполнить. Это может быть одно из следующих значений:
Константа VBA Значение Пояснение vbUseCompareOption –1 Использует вариант сравнения vbBinaryСравнить 0 Двоичное сравнение vbTextСравнить 1 Текстовое сравнение
Возвращает
Функция INSTRREV возвращает числовое значение.
Если строка2 не найдена в пределах string_being_searched , функция INSTRREV вернет 0.
Если string_being_searched имеет нулевую длину, функция INSTRREV вернет 0.
Если string_being_searched имеет значение null, функция INSTRREV вернет значение null. ноль.
Если start имеет значение null, функция INSTRREV вернет #Error.
Относится к
- Excel для Office 365, Excel 2019, Excel 2016, Excel 2013, Excel 2011 для Mac, Excel 2010, Excel 2007, Excel 2003, Excel XP, Excel 2000
Пример (как функция VBA)
Функцию INSTRREV можно использовать только в коде VBA в Microsoft Excel.
Давайте посмотрим на некоторые примеры функции INSTRREV в Excel и узнаем, как использовать функцию INSTRREV в коде Excel VBA:
InStrRev («алфавит», «а») Результат: 5 InStrRev («алфавит», «а», -1) Результат: 5 InStrRev («алфавит», «а», 1) Результат: 1 InStrRev («алфавит», «а», 2) Результат: 1 InStrRev («алфавит», «а», 3) Результат: 1 InStrRev («алфавит», «а», 4) Результат: 1 InStrRev («алфавит», «а», 5) Результат: 5 InStrRev («алфавит», «а», 6) Результат: 5 InStrRev («алфавит», «а», 7) Результат: 5 InStrRev («алфавит», «а», 8) Результат: 5 InStrRev («алфавит», «а», 9) Результат: 0
Например:
Dim LP Position As Integer (Тусклое положение LP как целое число) LPosition = InStrRev ("алфавит", "а")
В этом примере переменная LPosition теперь будет содержать значение 5.
VBA InStr и InStrRev — Как использовать
Как следует из названия Функция InStr VBA ищет подстроку, встроенную в другую строку, а затем возвращает ее начальную позицию.
Если не удается найти строку внутри родительской строки, возвращается 0. Это очень важная функция среди строковых функций в VBA. Вероятно, это лучшая функция для выполнения операций поиска строк в VBA.
В этом посте я объясню функции InStr и InStrRev в VBA на примерах:
Синтаксис функции VBA Instr:
Синтаксис Instr следующий:
Instr ([начало], parent_string, substring, [сравнить])
Здесь «начало» относится к позиции, с которой должен начинаться поиск.Это необязательный параметр, и если он не указан, то поиск строки начинается с 1 st позиции внутри «parent_string»
«parent_string» — это строка, внутри которой должна быть найдена «подстрока».
«подстрока» — это строка, которая должна быть найдена внутри «родительской_строки».
«Сравнить» определяет алгоритм сравнения, с помощью которого должен производиться поиск. Это также необязательный параметр. В расширенных случаях параметр сравнения может иметь любое из следующих значений:
Значение параметра | Описание |
vbBinaryCompare | Указывает, что сравнение должно быть двоичным i.е. каждый символ должен соответствовать только самому себе. Это значение по умолчанию. |
vbTextCompare | Указывает, что сравнение должно быть текстом для сравнения текста. |
vbDatabaseCompare | Указывает, что для сравнения следует использовать параметры локали базы данных, а не простой текст. |
Несколько важных моментов о функции Instr:
- Если любая из строк, например, parent_string или substring, Null .Тогда инструкция VBA Instr возвращает Null и, следовательно, может привести к поломке кода. Итак, перед передачей какого-либо значения в функцию Instr проверьте, действительно ли значение. Также убедитесь, что вы выполнили правильную обработку ошибок в коде.
- Возвращает параметр «начало», если параметр «подстрока» пуст.
- Возвращает 0, если «подстрока» отсутствует внутри «родительской_строки».
- Если значение параметра start больше, чем длина parent_string, то функция Instr также возвращает 0.
Примеры функции Instr:
Теперь давайте рассмотрим несколько примеров функции VBA Instr:
1. InStr («Excel-Trick», «Trick»)
вернет результат 7 в виде строки «Trick» начинается с седьмой позиции внутри «parent_string», то есть «Excel-Trick».
2. InStr ("Excel-Trick", "c")
вернет 3, поскольку символ «c» первым идет на третьей позиции внутри «parent_string».
3. InStr (4, "Excel-Trick", "c")
приведет к 10, поскольку здесь мы начинаем поиск «c» с 4 -го символа , и, следовательно, Instr дает нам позицию вторая буква «c» (Excel-Tri c k) в строке parent_string.
4. InStr («Аллигатор», «z»)
приведет к 0, поскольку в родительской строке нет символа «z».
5. InStr (1, «Аллигатор», «а»)
приведет к 6, поскольку строчный символ «а» присутствует в позиции 6 внутри слова «Аллигатор».
6. InStr (1, «Аллигатор», «a», vbTextCompare)
приведет к 1, поскольку здесь мы использовали «vbTextCompare», который игнорирует разницу между символами верхнего и нижнего регистра.
Использование vbTextCompare — не лучший способ:
vbTextCompare — небезопасный вариант для использования при работе со строками без учета регистра.Причина этого в том, что во многих случаях это может привести к ошибочным результатам при обработке некоторых символов:
Например:
InStr (1, «Ætna», «et», vbTextCompare)
приводит к 1, потому что символ «Æ» — латинский символ, обозначающий «et». Следовательно, vbTextCompare рассматривает «Æ» как «et», такое поведение vbTextCompare вводит в заблуждение.
Итак, в случаях, когда вы имеете дело с символами без учета регистра, как в примере 6, лучшим способом будет:
InStr (LCase ("Alligator"), LCase ("a"))
Здесь Функция LCase преобразует строки в символы нижнего регистра, а результат инструкции InStr — в 1.
Функция обратного поиска строки в VBA: InStrRev
Функция InStrRev аналогична функции VBA InStr с той лишь разницей, что она начинает поиск «подстроки» внутри «родительской_строки» от конца до начала.
Синтаксис InStrRev следующий:
InStrRev (родительская_строка, подстрока, [начало], [сравнение])
Здесь также «родительская_строка» относится к строке, в которой «подстрока» должна быть найдена. .
«подстрока» — это строка, в которой выполняется поиск внутри «родительской_строки».
«начало» снова является необязательным параметром, который определяет, с какой позиции следует начинать поиск.
Параметр «сравнить» относится к типу сравнения, например: vbBinaryCompare, vbTextCompare и
vbDatabaseCompare.
Примечание: Обратите внимание на разницу в месте параметров функций InStr и InStrRev.
Пример функции InStrRev:
InStrRev («aligator», «a»)
приводит к 5. Функция InStrRev начинает поиск символа «a» внутри «parent_string» в обратном направлении и при обнаружении первого «a» ”(В обратном направлении) он проверяет свое положение в прямом направлении и выдает его в качестве результата.
Практическое использование InStrRev может заключаться в нахождении последнего индекса символа внутри строки.
Образец макроса, имеющий как VBA InStr, так и VBA InStrRev:
Ниже приводится очевидный макрос, в котором я использовал функции InStr и InStrRev:
Sub SearchStrings () Start_pos = InStr ("aesthesia", " ") Last_pos = InStrRev (" aesthesia "," a ") MsgBox" InStr Output = "& Start_pos & vbNewLine &" InStrRev Output = "& Last_posEnd Sub
Итак, это все о функциях InStr и InStrRev в VBA.Сообщите нам, если у вас есть какие-либо сомнения или вопросы, связанные с этой темой.
Рекомендуемое чтениеVBA: функция InStrRev — ссылка VBA
Функция VBA InStrRev возвращает позицию индекса первого вхождения строки в предоставленной строке , если смотреть с правого конца строки. Возвращаемый результат — размещение строки, смотрящей спереди.
'InStrRev Debug.Print InStrRev ("abcdefabc", "a") 'Результат: 7 'Потому что он обнаружил, что это первая буква "а" как третья с конца строки.'Результат - положение второй буквы «а», смотрящей спереди строки. 'InStr Debug.Print InStr ("abcdefabc", "a") 'Результат: 1 'Потому что он обнаружил, что это первая буква "а" как первая от начала строки.
Используйте InStr для возврата позиции индекса первого вхождения, если смотреть с начала конца строки (слева).
Синтаксис VBA InStrRev
Синтаксис функции InStrRev в VBA:
InStrRev (строка, подстрока [, начало [, сравнить]])
Параметры
строка
Строка для поиска.
подстрока
Подстрока, которую вы хотите найти.
начало
Необязательно. Начальная позиция индекса для функции InStr. Если он не указан, поиск начнется с позиции индекса -1, которая является последней позицией индекса символа в строке (гипотетически — длина строки + 1).
сравнить
Необязательно. Тип сравнения, выполняемого при поиске подстроки .Может быть одной из следующих констант:
Константа | Значение | Описание |
---|---|---|
vbUseCompareOption | –1 | Использует вариант сравнения |
vbBinaryСравнить | 0 | Двоичное сравнение (различает регистр букв) |
vbTextСравнить | 1 | Сравнение текстов (без учета регистра) |
Прочие примечания
Функция InStrRev вернет 0, если подстрока не найдена в строке .
Позиции символов строки в VBA индексируются, начиная с 1. См. Примеры ниже.
Пример использования
Функцию InStrRev можно использовать только в коде VBA. Давайте посмотрим на некоторые примеры функций VBA InStrRev:
InStrRev «Привет, мир!», «Мир» Результат: 7 InStrRev "Вау, вау, вау", "Вау" Результат: 11 InStrRev «Привет!», «Там», -1, vbTextCompare Результат: 4 InStrRev «Привет!», «Там», -1, vbBinaryCompare Результат: 0 InStr 1, «Привет!», «Там», -1, vbBinaryCompare) Результат: 4
Функция VBA InStrRev | Объяснение с примерами синтаксиса
Обзор функции VBA InStrRev:
Функция VBA InStrRev относится к категории текстовых / строковых функций в VBA.Это встроенная функция в MS Office Excel. Он возвращает позицию подстроки в строке, выполняя поиск справа налево. У него есть два обязательных параметра и два необязательных параметра. Если подстрока не найдена, функция возвращает значение «0». Если параметр Start равен Null, функция возвращает ошибку. Эта функция может использоваться как функция VBA и не может использоваться как функция листа Excel. Функцию InStrRev можно использовать либо в процедуре, либо в функции в окне редактора VBA в Excel.Мы можем использовать эту функцию VBA InStrRev любое количество раз в любом количестве процедур или функций. В следующем разделе мы узнаем, каков синтаксис и параметры функции InStrRev, где мы можем использовать эту функцию InStrRev и примеры в реальном времени в VBA.
Содержание:
Синтаксис функции VBA InStrRev
Синтаксис функции VBA InStrRev:
InStrRev (StringCheck, StringMatch, [Начало], [Сравнить])
Примечание. Эта функция InStrRev возвращает значение.
Параметры или аргументы
Эта функция имеет один обязательный параметр и три дополнительных параметра для функции InStrRev.
Где
StringCheck: Выражение является обязательным аргументом. Он представляет собой строку, в которой вы хотите выполнить поиск.
StringMatch: Выражение является обязательным аргументом. Он представляет собой подстроку, которую вы хотите найти.
Начало: FirstDayOfWeek — необязательный аргумент. Он представляет собой начальную позицию, с которой вы хотите начать поиск.Значение этого параметра по умолчанию — «-1». Если вы проигнорируете этот аргумент, он будет считать значение по умолчанию.
Сравните: FirstWeekOfYear — необязательный аргумент. Он представляет собой тип сравнения при выполнении поиска. Сравнение по умолчанию — vbBinaryCompare. Вот сравнительная таблица.
VBA Сравнить | Значение | Пояснение |
---|---|---|
vbUseCompareOption | –1 | Выполняет сравнение с использованием опции «сравнить» |
vbBinaryСравнить | 0 | Выполняет двоичное сравнение |
vbTextСравнить | 1 | Выполняет текстовое сравнение |
vbDatabaseCompare | 2 | Только Microsoft Access.Выполняет сравнение на основе информации в вашей базе данных. |
Где мы можем применить или использовать функцию VBA InStrRev?
Мы можем использовать эту функцию VBA InStrRev в MS Office 365, MS Excel 2016, MS Excel 2013, 2011, Excel 2010, Excel 2007, Excel 2003, Excel 2016 для Mac, Excel 2011 для Mac, Excel Online, Excel для iPhone, Excel для iPad, Excel для планшетов с Android и Excel для мобильных устройств с Android.
Пример 1. Найдите последнее вхождение слова «help» в строке «VBA Help help»
Вот простой пример функции VBA InStrRev.В приведенном ниже примере макроса используется функция InStrRev и выполняется поиск указанной позиции подстроки внутри данной строки, начиная с позиции -1.
'Искать последнее вхождение слова "help" в строке "VBA Help help" Sub VBA_InStrRev_Function_Ex1 () 'Объявление переменной Dim iPosition As Integer Тусклое слово как строка sWord = "Справка по VBA" iPosition = InStrRev (sWord, «помощь») 'или же Позиция = InStrRev (sWord, «справка», -1) 'Отображение выходного сообщения MsgBox "Положение слова 'help' в строке:" & iPosition, vbInformation, "VBA InStrRev Function" Конец подписки
Вывод: Вот снимок экрана первого примера вывода.
Пример 2: Поиск последнего появления пустого места в строке «Справка по VBA»
Вот еще один пример функции VBA InStrRev. В приведенном ниже примере макроса используется функция InStrRev и выполняется поиск позиции пустого места в заданной строке, начиная с позиции 3
.'Поиск последнего появления пустого места в строке «Справка по VBA» Sub VBA_InStrRev_Function_Ex2 () 'Объявление переменной Dim iPosition As Integer Тусклое слово как строка sWord = "Справка по VBA" iPosition = InStrRev (sWord, "") 'Отображение выходного сообщения MsgBox "Последнее появление позиции пустого места:" & iPosition, vbInformation, "VBA InStrRev Function" Конец подписки
Вывод: Вот скриншот второго примера вывода.
Инструкции по использованию макросов
Вот пошаговые инструкции по использованию функции VBA InStrRev в Excel VBA.
- Откройте книгу Excel.
- Нажмите Alt + F11, чтобы открыть окно редактора VBA.
- Перейдите в меню «Вставка» и щелкните модуль из доступных опций.
- Скопируйте указанные выше макросы в редактор VBA.
- Выберите любую процедуру из приведенных выше кодов и нажмите «Выполнить» или используйте сочетание клавиш «F5».
Список функций VBA:
Щелкните ссылку ниже, чтобы вернуться к просмотру всего списка функций VBA.
Список функций VBA
VBA InStrRev | Как использовать функцию Excel VBA InStrRev?
Excel VBA INSTRREV
VBA INSTRREV Функция, как означает ‘In String Reverse’ , возвращает позицию первого вхождения строки поиска (подстроки) в другой строке, начиная с конца строки (справа налево) из которого мы ищем строку с возможностью поиска.
INSTRREV Функция начинает поиск доступной для поиска строки с конца строки, в которой нам нужно найти, но считает позицию с начала. Существует еще одна функция VBA INSTR (обозначает ‘In String’ ), которая также ищет строку в другой строке и возвращает позицию, но эта функция начинает поиск с начала строки, из которой мы ищем доступная для поиска строка.
INSTRREV и INSTR , оба являются встроенной функцией String / Text VBA в MS Excel.Мы можем использовать их при написании любого макроса в редакторе Microsoft Visual Basic.
Синтаксис
Как видно на изображении выше, есть 2 обязательных и 2 необязательных аргумента.
- StringCheck As String: Это обязательный аргумент. Нам нужно указать строковое выражение, в котором выполняется поиск.
- StringMatch As String: Этот аргумент также является обязательным. Нам нужно указать строковое выражение, которое ищется.
- Начать как длинное = -1: Это необязательный аргумент. Указываем числовое выражение. По умолчанию принимает значение -1, что означает, что поиск начинается с позиции последнего символа. Если мы укажем любое положительное значение, например 80, поиск начнется с конца строки в этих 80 символах слева.
- Сравнить как VbCompareMethod = vbBinaryCompare As Long: Этот аргумент является необязательным.
Мы можем указать следующие значения для этого аргумента.
Возвращаемые значения
- INSTRREV функция возвращает 0, если проверка строки имеет нулевую длину или совпадение строки не найдено или «начало» аргумента > длина совпадения строки .
- Эта функция возвращает «Null» , если проверка строки или совпадение строки равно «Null».
- Если строка соответствует нулевой длины, функция возвращается к start .
- Если совпадение строки найдено в проверке строки , , тогда функция возвращает позицию, в которой найдено совпадение.
Как использовать функцию VBA INSTRREV?
Предположим, у нас есть данные по названиям фильмов и их режиссерам. Мы хотим разделить имена директоров.
У нас есть данные в 1201 строке. Если мы сделаем эту задачу вручную, это займет много времени.
Чтобы сделать то же самое, мы будем использовать код VBA.Шаги:
- Нам нужно нажать на команду «Visual Basic» , доступную в группе «Код» на вкладке «Разработчик» , или мы можем нажать Alt + F11 , чтобы открыть редактор Visual Basic.
- Мы вставим модуль , используя меню «Вставить» .
- Мы создадим подпрограмму с именем «SplittingNames».
- Нам нужно 6 переменных — одна для хранения значений ячеек, которыми мы будем манипулировать.Второй — для хранения позиции первого пробела в строке, третий — для хранения позиции последнего пробела в строке, четвертый — для хранения номера последней строки, пятый и шестой — для строки и столбца, которые мы будем использовать для печати значений в соседних клетки.
- Чтобы узнать последнюю использованную строку на листе, нам нужно использовать следующий код.
Этот код сначала выберет ячейку B1, а затем выберет последнюю использованную ячейку в том же столбце, а затем мы присвоим номер строки ячейки переменной «LastRow».
- Теперь, чтобы управлять всеми ячейками в столбце B, мы запустим цикл «for» .
- Мы будем сохранять значения ячеек столбца B от строки 2 до строки 1201 одну за другой в переменной «s», чтобы управлять ими.
- Нам нужно установить значение переменной «Столбец» на 3, так как нам нужно записать имена разбиения в C (3 ряд Столбец) и столбец вперед.
- Если строка состоит только из одного слова, что означает, что в строке нет пробела, тогда нам нужна сама строка в качестве вывода.Для этого мы укажем условие, используя ‘If and Else statement’ со знаком звездочки (обозначающим один или несколько символов) следующим образом:
- Если в строке есть пробел, мы хотим разделить строку. Чтобы сделать то же самое, мы использовали функции INSTR и INSTRREV для определения первой и последней позиции пробела, соответственно. Это поможет нам найти первое и последнее слово в строке соответственно.
Функция INSTR принимает следующий аргумент:
Подробности аргумента
- Начало: С какой позиции начать.
- String1: Нам нужно указать строковое выражение, в котором выполняется поиск.
- String2: Нам нужно указать строковое выражение, которое ищется.
По сравнению с VbCompareMethod: Указание метода сравнения. По умолчанию это двоичное сравнение.
- Нам нужно использовать функцию VBA LEFT для извлечения левых символов из строки. Мы использовали ‘Last Space-1’ , чтобы получить левые символы перед последним пробелом.
Нам нужно использовать функции RIGHT и LEN для извлечения правильных символов из строки после первого пробела.
Макрос написан. Теперь нам просто нужно запустить макрос с помощью клавиши F5 .
Код:
Sub SplittingNames () Dim s As String Dim FirstSpace как долго Dim LastSPace как долго Dim LastRow As Long Тусклый ряд по всей длине Тусклый столбец по длине Лист1.Диапазон ("B1"). Выберите Selection.End (xlDown) .Select LastRow = ActiveCell.Row Для строки = 2 до последней строки s = Sheet1.Cells (Row, 2) .Value Столбец = 3 Если s Like "* *" Тогда FirstSpace = InStr (1, s, "") LastSPace = InStrRev (s, "") Sheet1.Cells (строка, столбец) .Value = Left (s, LastSPace - 1) Sheet1.Cells (Row, Column + 1) .Value = Right (s, Len (s) - FirstSpace). Еще Sheet1.Cells (строка, столбец) .Value = s Конец, если Следующий Концевой переводник
Теперь у нас есть результат.
Рекомендуемые статьи
Это руководство по VBA INSTRREV. Здесь мы обсуждаем, как использовать функцию VBA INSTRREV вместе с примерами и загружаемым шаблоном Excel. Ниже приведены несколько полезных статей в Excel, связанных с VBA —
. Обучение VBA (3 курса, 12+ проектов)- 3 курса
- 12 практических проектов
- 43+ часов
- Полный пожизненный доступ
- Свидетельство о завершении