Организация ввода и вывода сообщений. Примеры vba
Описание VBA
ВВЕДЕНИЕ
Microsoft Excel имеет встроенный язык программирования - Visual Basic for Аpplications (VBA). Этот язык позволяет создавать приложения, выполняемые в среде Microsoft Office. Это могут быть разнообразные аналитические программы, финансовые системы, программы учета кадров, системы автоматического создания официальных писем/документов с помощью библиотеки готовых шаблонов и т.п. При этом интерфейс создаваемой программы может быть совершенно непохожим на интерфейс того приложения, в котором она написана.
VBA сочетает в себе практически неограниченные возможности с простотой изучения и использования. Теперь большинство функций можно описать, не прибегая к программированию. В том случае, если возможностей языка недостаточно, можно обратиться к API-функциям Windows. Пожалуй, самое главное достоинство VBA в том, что этот язык является единым для всех офисных приложений Microsoft и поэтому позволяет связывать их между собой. Уже сейчас из программы, написанной в Excel, можно обращаться к объектам Word для Windows, а также Microsoft Project. Это открывает заманчивые перспективы. Представьте, что пользователь на конкретном рабочем месте должен на основе некоторых данных, извлекаемых из базы, делать их анализ, строить диаграммы и проектировать деятельность организации, а также автоматически выполнять рассылку этих обработанных данных по некоторым адресам вместе с сопроводительным письмом. Все это можно сделать средствами офисных продуктов Microsoft, однако при этом пользователь должен в совершенстве овладеть каждым из них. В случае если программа для решения этой задачи написана на VBA, пользователю придется изучить только ее.
Программа MS Excel, являясь лидером на рынке программ обработки электронных таблиц, определяет тенденции развития в этой области. Вплоть до версии 4.0 программа Excel представляла собой фактический стандарт с точки зрения функциональных возможностей и удобства работы.
Одним из важнейших функциональных расширений программы, предназначенным для профессионалов, является встроенная в Excel Среда программирования Visual Basic (VBA) для решения прикладных задач. Благодаря VBA фирме Microsoft удалось не только расширить возможности языка макрокоманд Excel 4.0, но и ввести новый уровень прикладного программирования, поскольку VBA позволяет создавать полноценные прикладные пакеты, которые по своим функциям выходят далеко за рамки обработки электронных таблиц.
Краткое описание VBA
Visual Basic for Applications представляет собой новаторское достижение в языках программирования, возможно наиболее значительное с тех пор, как состоялся выпуск первой интегрированной среды разработки. Это означает, не то что VBA — лучшее средство разработки, а лишь то, что VBA существует. Visual Basic, вероятно, самое популярное средство разработки, и теперь совершенно неожиданно этот язык включен в не менее популярный комплект прикладных программ.
Поскольку основой приложений Microsoft послужил один и тот же язык программирования, вероятно, многим придет в голову мысль воспользоваться им. Точно так же, как пользователям Windows для подготовки множества программ необходимо освоить один интерфейс, в V BA достаточно изучить одну среду программирования, чтобы составлять разнообразные приложения. Около 40 компаний — производителей программного обеспечения заключили с корпорацией Microsoft соглашение о включении VBA в их продукты. Первой из этих компаний на рынок вышла фирма Visio Corp., которая интегрировала VBA в пакеты Visio Professional и Visio Technical, версия 4.5. Можно ожи дать от таких фирм агрессивной рыночной политики в отношении VBA, поскольку с этим языком их продукты оказались в заметном выигрыше. Настоящее имя VBA — Visual Basic Application Edition, и он на самом деле относится к семейству VB, следовательно, вызывает повышенный интерес как самостоятельное инструментальное средство.
Встраивание VBA в какое-то приложение означает для него создание объектной модели, в результате VBA-программа может обращаться к объектам этого при ложения и манипулировать ими. Для изделий фирмы Visio к числу таких объектов могут относиться как прямоугольник на рисунке, так и сам рисунок, а объектная модель распространяется на все эти элементы.
А приложение с объектной моделью и VBA — это уже часть арсенала разработчика. Предположим, например, что вы хотите составить программу, с помощью которой можно было бы подготовить схему расстановки мебели и оборудования на кухне, а затем распечатать список предметов и цен. Для этой программы нужна база данных с информацией о предметах кухонной обстановки и какой-либо способ визуализации изображения кухни.
Точно так же, как можно составить макрокоманду Office, которая обращается к программам Word и Excel, можно разработать VBA-программу, сочетающую в себе средства Access и Visio. Составное приложение для планировки кухни можно считать неким гибридом Access с механизмом черчения или Visio с базой данных.
VBA — собственное подмножество VB5, но на самом деле в VBA есть почти все, что можно найти в VB5. Надо признать, что незначительные отличия все же имеются (например, запуск из Word, а не в автономном режиме), но в любом случае программирование осуществляется одинаково. Объектные модели Office 97 имеют силу до тех пор, пока выполняются приложения, которым они принадлежат, поэтому и VBA, и VB5 могут манипулировать ими. Vs Мы видим, что от аналогичной в VB5 интегрированная среда разработки в VBA почти ничем не отличается.
ПРИМЕР ВЗАИМОДЕЙСТВИЯ EXCEL И VISUAL BASIC
Начиная с версии 5.0 в программу Excel включен специальный язык программирования, который получил название Visual Basic for Applications (VBA).
Введение достаточно мощного языка программирования в Excel делает эту программную платформу весьма привлекательной для профессионалов, которые занимаются разработкой специализированных прикладных систем.
Разработка языка программирования VBA, встраиваемого в прикладные системы, является одним из стратегических направлений компании Microsoft. Этот язык уже интегрирован в такие программы, как Word for Windows, Power Point и ряд других. VBA позволяет создавать программные модули, меню, диалоговые окна и другие ресурсы в среде Windows. Благодаря этому языку появляется возможность значительно расширить набор функций в Excel, а также создавать функции, значения которых зависят от некоторых условий и событий. В принципе, можно полностью перепрограммировать все функции программы Excel, если в этом появилась необходимость.
Программирование табличных функций.
Чтобы создать отдельный рабочий лист для программного модуля, щелкните по пиктограмме Insert Module из пиктографического меню Visual Basic (1-я пиктограмма) или вызовите директиву Module из меню Insert Macro . После этого появится новый рабочий лист "Modele1". В программном модуле нужно описать функцию на языке VBA. В окне программного модуля можно работать, как в окне небольшого текстового редактора, но при этом необходимо помнить, что Вы пишите текст программы. Описание функции должно начинаться оператором Function, за которым через пробел следуют название функции и ее аргументы, заключенные в скобки и разделенные запятыми. Затем идет собственно текст программного кода функции, а заканчиваться описание должно оператором End Function.
Если в тексте программного кода имя определяемой функции будет находиться в левой части оператора присваивания (обозначаемого знаком равенства), то присвоенное значение и будет результатом вычисления функции при заданных аргументах. В качестве примера можно рассмотреть функцию, которая вычисляет налог на добавленную стоимость.
Function NDS(Value)
NDS=Value*0.15
End Function
Встраивание функций.
Щелкните по 3-й пиктограмме Object Browser из пиктографического меню VBA или вызовите одноименную директиву из меню View .
Функции, определенные пользователем, рассматриваются в программе Excel как самостоятельные объекты. В поле списка Methods/Properties: будет находиться имя новой функции. Щелкните мышью сначала по имени, а затем по командной кнопке Options , тогда откроется диалоговое окно Macro Options . В поле Description: введите поясняющий текст, который позднее будет использован Конструктором функций. В списке Function Category укажите категорию, в которую Вы хотите записать свою функцию. Например, функцию, вычисляющую налог на добавленную стоимость, следует поместить в категорию Financial . В дальнейшем Конструктор функций поместит Вашу функцию в указанную Вами категорию. Закройте окно Macro Options щелчком по командной кнопке OK , а окно Object Browser - кнопкой Close .
Применение функций.
Перейдите на рабочий лист, где будет расположена таблица. Переместите указатель ячеек в ячейку, в которой будет находиться формула, и введите в нее знак равенства. Затем щелкните по 14-й пиктограмме Конструктора функций на основной пиктографической панели.
Появится диалоговое окно Конструктора функций. На первом шаге выберите категорию Financial и в правом поле найдите свою функцию NDS. Щелкните по названию этой функции, после чего перейдите к следующему шагу, щелкнув по командной кнопке Next .
Откроется второе диалоговое окно Конструктора функций. Здесь можно будет увидеть Ваш комментарий к функции, который был введен ранее в окне макроопций. Укажите единственный аргумент для этой функции Value и закройте диалоговое окно Конструктора щелчком по кнопке Finish .
В таблице появится значение, составляющее 15% величины аргумента. В таблице с этой функцией можно работать как с обычной функцией программы Excel.
mirznanii.com
Часть 11: Примеры по VBA - От психологии до информатики
Данный учебник является введением в язык программирования Excel VBA (Visual Basic for Applications). Изучив VBA, Вы сможете создавать макросы и выполнять в Excel практически любые задачи. Вы очень скоро поймёте, что макросы могут сэкономить уйму времени благодаря автоматизации повторяющихся задач и обеспечить гибкое взаимодействие с другими пользователями
Часть 11: Примеры по VBA
Часть 11: Примеры по VBA
МАКРОС EXCEL: ПРИМЕР 1
Первоначально эта процедура Sub была приведена, как пример использования комментариев в коде VBA. Однако, здесь также можно увидеть, как объявляются переменные, как работают ссылки на ячейки Excel, использование циклаFor, условного оператора If и вывод на экран окна сообщения.
Sub Find_String(sFindText As String) |
Dim i As Integer |
Dim iRowNumber As Integer |
For i = 1 To 100 |
If Cells(i, 1).Value = sFindText Then |
iRowNumber = i |
Exit For |
If iRowNumber = 0 Then |
MsgBox "Строка " & sFindText & " не найдена" |
MsgBox "Строка " & sFindText & " найдена в ячейке A" & iRowNumber |
МАКРОС EXCEL: ПРИМЕР 2
Следующая процедура Sub – пример использования цикла Do While. Здесь также можно увидеть, как объявляются переменные, работу со ссылками на ячейки Excel и применение условного оператора If.
Dim i As Integer |
Dim iFib As Integer |
Dim iFib_Next As Integer |
Dim iStep As Integer |
Do While iFib_Next < 1000 |
If i = 1 Then |
iStep = 1 |
iFib = 0 |
iStep = iFib |
iFib = iFib_Next |
Cells(i, 1).Value = iFib |
iFib_Next = iFib + iStep |
МАКРОС EXCEL: ПРИМЕР 3
Эта процедура Sub просматривает ячейки столбца A активного листа до тех пор, пока не встретит пустую ячейку. Значения записываются в массив. Этот простой макрос Excel показывает работу с динамическими массивами, а также использование цикла Do Until. В данном примере мы не будет совершать какие-либо действия с массивом, хотя в реальной практике программирования после того, как данные записаны в массив, над ними такие действия, как правило, совершаются.
Dim iRow As Integer |
Dim dCellValues() As Double |
ReDim dCellValues(1 To 10) |
Do Until IsEmpty(Cells(iRow, 1)) |
If UBound(dCellValues) < iRow Then |
ReDim Preserve dCellValues(1 To iRow + 9) |
dCellValues(iRow) = Cells(iRow, 1).Value |
iRow = iRow + 1 |
МАКРОС EXCEL: ПРИМЕР 4
В этом примере процедура Sub считывает значения из столбца A рабочего листа Лист2 и выполняет с ними арифметические операции. Результаты заносятся в ячейки столбца A на активном рабочем листе. В этом макросе продемонстрировано использование объектов Excel. В частности, производится обращение процедурой Sub к объекту Columns, и показано, как доступ к этому объекту осуществляется через объект Worksheet. Показано так же, что при обращении к ячейке или диапазону ячеек на активном листе, имя этого листа при записи ссылки указывать не обязательно.
Dim i As Integer |
Dim Col As Range |
Dim dVal As Double |
Set Col = Sheets("Лист2").Columns("A") |
Do Until IsEmpty(Col.Cells(i)) |
dVal = Col.Cells(i).Value * 3 - 1 |
Cells(i, 1) = dVal |
МАКРОС EXCEL: ПРИМЕР 5
Данный макрос показывает пример кода VBA, отслеживающего событие Excel. Событие, к которому привязан макрос, происходит каждый раз при выделении ячейки или диапазона ячеек на рабочем листе. В нашем случае при выделении ячейки B1, на экран выводится окно с сообщением.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then |
MsgBox "Вы выбрали ячейку B1" |
МАКРОС EXCEL: ПРИМЕР 6
На примере этой процедуры показано использование операторов On Error и Resume для обработки ошибок. В данном коде также показан пример открытия и чтения данных из файла.
Sub Set_Values(Val1 As Double, Val2 As Double) |
Dim DataWorkbook As Workbook |
On Error GoTo ErrorHandling |
Set DataWorkbook = Workbooks.Open("C:Documents and SettingsData") |
Val1 = Sheets("Лист1").Cells(1, 1) |
Val2 = Sheets("Лист1").Cells(1, 2) |
DataWorkbook.Close |
MsgBox "Файл Data.xlsx не найден! " & _ |
"Пожалуйста добавьте рабочую книгу в папку C:Documents and Settings и нажмите OK" |
psybriefing.ru
Visual Basic for Applications - реализация языка программирования Basic
Visual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office (включая версии для Mac OS), а также во многие другие программные пакеты, в том числе AutoCAD, WordPerfect и ESRI ArcGIS. VBA покрывает и расширяет функциональность ранее использовавшихся специализированных макро-языков, таких, как WordBasic. VBA может использоваться для управления приложением (меню, панели инструментов, формы пользователя, диалоговые окна и т.д.), а также для создания, импорта и экспорта различных форматов файлов.
VBA является интерпретируемым языком. Как следует из названия, VBA близок к Visual Basic, но может выполняться лишь в рамках приложения, в которое он встроен. Кроме того, он может использоваться для управления одним приложением из другого при помощи OLE Automation (например, таким образом можно создать документ Word на основе данных из Excel).
VBA функционально богат и чрезвычайно гибок, но имеет ряд ограничений, включая ограниченную поддержку указателей на функции (используются в Windows API). Имеется возможность использовать (но не создавать) библиотеки DLL.
Язык
VBA — транслируемый язык. Это означает, что его команды сначала преобразуются к исполняемой форме. Контейнеры VBA (Access, Excel, Word) могут сохранять странслированную программу в скрытой форме в исходном документе (чтобы избежать перекомпиляции при каждом выполнении программы). Исполнение кода происходит в виртуальной машине (как в Java), что зачастую ошибочно называют интерпретацией. Несмотря на его схожесть со многими старыми диалектами BASIC (особенно Microsoft BASIC), VBA не совместим с ними, кроме Microsoft Visual Basic до версии 6, и не совместим с VB.NET.
Использование VBA с приложениями (Access, Excel, Word) предполагает соответствующую терминологию и языковые конструкции — так называемую «объектную модель приложения».
Проблемы безопасности
Широкое распространение Visual Basic for Applications в сочетании с изначально недостаточным вниманием к вопросам безопасности привело к широкому распространению макровирусов.
Как и программы на любом языке программирования, макросы VBA могут быть созданы с злым умыслом. Для защиты были введены опции приложения — пользователь по своему усмотрению может исполнять макросы VBA или отказаться от их использования.
Будущее Visual Basic for Applications
В будущем Microsoft планирует заменить VBA на Visual Studio Tools for Applications (VSTA) — инструментарий расширения функциональности приложений, основанный на Microsoft .NET.
progopedia.ru
2.13.1.5. Примеры использования функций VBA
100
2.13.1.5.1.Удаление ненужных символов
Зачастую строки в программе содержат ненужные символы пробелов
вконце или в начале строки, которые необходимо удалить, т.к. посторонние начальные или конечные пробелы в строке могут вызвать "неполадки"
вработе программы. В VBA имеются три функции, предназначенные для удаления начальных и конечных пробелов из строки: LTrim, RTrim, Trim. Эти функции не изменяют исходную строку, а возвращают копию строки с удаленными лишними пробелами.
Пример
Sub Встр_функции_1()
Dim Стр0, Стр1, Стр2, Стр3 Стр0 = " Строка "
Стр1 = RTrim(Стр0) Стр2 = LTrim(Стр0) Стр3 = Trim(Стр0)
MsgBox "(" & Стр1 & ")" & Chr(13) & _ "(" & Стр2 & ")" & Chr(13) & _
"(" & Стр3 & ")" End Sub
При выполнении этой процедуры выводится диалоговое окно
2.13.1.5.2. Определение длины строки
Длину строки, как правило, надо знать при форматировании сообщений для пользователя или при форматировании строковых данных, вводимых процедурой в рабочий лист Excel или документ Word. VBA для этих целей использует функцию Len. В приведенным ниже листинге между знаками круглых скобок и словом присутствует по два пробела.
Пример
Sub Встр_функции_2()
Dim Стр0 As String, Стр1 As Byte
Стр0 = " Строка "
Стр1 = Len(Стр0) MsgBox "Стр1=" & Стр1
End Sub
Строка фиксированной длины имеет всегда одну и ту же длину, и поэтому функция Len всегда возвращает объявленную длину строки, незави-
101
симо от фактической длины строки. Например, если в строковой переменной фиксированной длины Стр0 определить длину, равную 20 символам, а фактически находится слово "Строка", то функция Len(Стр0) возвратит результат, равный 20.
Примеры
Sub Встр_функции_3()
Dim Стр0 As String * 20, Стр1 As Byte
Стр0 = "Строка"
Стр1 = Len(Стр0) MsgBox "Стр1=" & Стр1
End Sub
Чтобы в таком случае узнать фактическую длину строки (в нашем случае – 6), необходимо использовать комбинацию функций
Len(Trim(StrokeName)):
Sub Встр_функции_4() | End Sub |
Dim Стр0 As String * 20, Стр1 As Byte |
|
Стр0 = "Строка"
Стр1 = Len(Trim(Стр0)) MsgBox "Стр1=" & Стр1
2.13.1.5.3.Сравнение и поиск строк
ВVBA имеются две функции, помогающих сравнивать строки:
StrComp и InStr.
Функция StrComp
Формат функции:
StrComp (String1, String2 [, Compare])
где String1,String2 – любые два строковых выражения, которые необходимо сравнивать. Compare – необязательный аргумент, может быть любой из следующих предопределенных констант:
vbBinaryCompare – бинарное сравнение двух строк;
vbTextCompare – текстовое сравнение двух строк.
При бинарном сравнении коды символов упорядочены в соотвествии с их двоичным значением, и коды строчных и прописных букв раразличаются при сравнении. При текстовом сравнении VBA прописные и строчные буквы не различает. Если аргумент Compare опускается, то используется текущая установка Option Compare.
Если аргумент Compare опускается, то используется текущая установка инструкцииOption Compare (см.Примечание к п. Инструкция условного перехода If…Then…Else).
102
Пример
В данном примере инструкция Option Compare используется для задания метода сравнения строковых данных, используемого по умолчанию.
Option compare Binary ' т.е. "AAA" < "aaa"
' Устанавливает метод сравнения строковых данных Binary. Option compare Text ' т. е. "AAA" = "aaa".
' Устанавливает метод сравнения строковых данных Text.
При выполнении процедуры StrComp возвращает следующее значене:
-1,если String1 меньше String2;
0, если String1 и String2 равны;
1, если String1 больше String2.
Пример
Sub Встр_функции_5()
Dim R1 As String, R2 As String, R3 As String
R1 = StrComp("Строка1", "Строка2", vbTextCompare)
R2 = StrComp("Строка1", "Строка1", vbTextCompare)
R3 = StrComp("Строка2", "Строка1", vbTextCompare) MsgBox "R1=" & R1 & " " & "R2=" & R2 & " " & "R3=" & R3 End Sub
В первой инструкции присваивания текстовое выражение Строка1 меньше, чемСтрока2, и поэтому значениеR1=–1,во втором они равны (R2=0) и в третьемСтрока2 больше, чемСтрока1 (R3=1).
Функция InStr
Функция InStr дает возможность определить, содержит ли одна строка другую строку.
Формат функции:
InStr ([Start,] String1, String2[, Compare])
String1, String2 – любые допустимые строковые выражения. Функция проверяет, содержится ли String1 в String2.
Start – необязательный аргумент, является численным выражением и указывает положение символа в String1, с которого должна начинаться проверка. АргументStart являетсяобязательным, если указывается аргумент
Compare.
Compare имеет тот же смысл, что и в функцииStrComp.
InStr возвращает число, обозначающее положение символа в String1, где было обнаружено String2. ЕслиInStr не находит String2 в String1, то возвращается 0. Если String1 (или String2) имеет значение Null (“Пусто”), то функция также возвращает Null.
Пример
Sub Встр_функции_6()
Dim R1 As String, R2 As String R1 = "Строка ввода"
R2 = "Ввод"
MsgBox "R2 входит в R1 с позиции " & _
103
InStr(1, R1, R2, vbTextCompare)
End Sub
2.13.1.5.4. Выделение части строки
Задачу выделения части строки в VBA решают три функции:
Left, Right и Mid.
Функция Left
Формат функции:
Left (String, Length)
String – любое допустимое строковое выражение;
Length – любое численное значение.
Функция возвращает копию String, начиная с первого символа и включая количество символов, заданных с помощьюLength. ЕслиLength является числом, большим, чем фактическая длинаString, то возвращается всё строковое выражениеString.
Функция Right
Формат функции:
Right (String, Length)
String – любое допустимое строковое выражение;
Length – любое численное значение.
Функция возвращает копию String, начиная с последнего символа и включая справа налево количество символов, заданных с помощьюLength. ЕслиLength является числом, большим, чем фактическая длинаString, то возвращается все строковое выражениеString. ФункцияRight всегда копирует символы от конца строки к ее началу.
Функция Mid
Формат функции:
Mid (String, Start, [, Length])
String – любое допустимое строковое выражение;
Length, Star t – любые численные значения.
Функция Mid возвращает копиюString, начиная с положения символа вString, задаваемого с помощью аргументаStart . Необязательный аргу-
studfiles.net
Организация ввода и вывода сообщений
Подобно многим языкам программирования Visual Basic for Application (VBA) позволяет создать три типа процедур: Sub, Function, Property.
Процедура – это набор описаний и инструкций, сгруппированных для выполнения.
Процедура Sub – набор команд, с помощью которого можно решить определенную задачу. При ее запуске выполняются команды процедуры, а затем управление передается в приложение или процедуру, которая вызвала процедуру Sub. Записываемые макросы автоматически описываются как процедуры Sub, любой макрос или другой код VBA, который просто выполняет определенный набор действий, используя приложения Office, и обычно является процедурой Sub.
Процедура Function (или функция) также представляет собой набор команд, который решает определенную задачу. Различия заключается в том, что процедуры данного типа обязательно возвращают значение. При создании процедуры Function можно описать тип данных, который возвращает функция. Функции обычно используются при выполнении вычислений, операциями с текстом, либо возвращают логические значения.
Процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей. Процедуры облегчают хранение и применение информации, если использовать их сначала для сохранения в свойстве этой информации, а затем для ее чтения.
Структура процедуры
При записи процедуры требуется соблюдать правила ее описания. Упрощенный синтаксис для процедур Sub является следующим:
Sub имя ([аргументы]) Инструкции End SubСинтаксис описания функций очень похож на синтаксис описания процедуры Sub, однако, имеются некоторые отличия:
Function имя ([аргументы]) [As Тип] Инструкции имя = выражение End FunctionИспользование операторов
Процедуры состоят из операторов – наименьших единиц программного кода. Как правило, операторы занимают по одной строке программного кода, и в каждой строке обычно содержится только один оператор, но это не обязательно. В VBA имеется четыре типа операторов: объявления, операторы присваивания, выполняемые операторы и параметры компилятора.
Объявления
Объявление – это оператор, сообщающий компилятору VBA о намерениях по поводу использования в программе именованного объекта (переменной, константы, пользовательского типа данных или процедуры). Кроме того, объявление задает тип объекта и обеспечивает компилятору дополнительную информацию о том, как использовать данный объект. Объявив объект, можно использовать его в любом месте программы.
Переменные – это именованные значения, которые могут изменяться во время выполнения программы.
Рассмотрим пример объявления переменной.
С помощью оператора Dim объявляется переменная с именем МоеЛюбимоеЧисло и объявляется, что значение, которое она будет содержать, должно быть целым:
Dim МоеЛюбимоеЧисло As IntegerКонстанты представляют собой именованные значения, которые не меняются.
Оператор Constant создает строковую константу (текст) с именем НеизменныйТекст, представляющую собой набор символов Вечность:
Constant НеизменныйТекст = "Вечность"Оператором Type объявляется пользовательский тип данных с именем Самоделкин, определяя его как структуру, включающую строковую переменную с именем Имя и переменную типа Date с именем ДеньРождения. В данном случае объявление займет несколько строк:
Type Самоделкин Имя As String ДеньРождения As Date End TypeОбъявление Private создает процедуру типа Sub с именем СкрытаяПроцедура, говоря о том, что эта процедура является локальной в смысле области видимости. Завершающий процедуру оператор End Sub считается частью объявления.
Private Sub СкрытаяПроцедура () инструкции End SubОператор присваивания
Оператор присваивания = приписывают переменным или свойствам объектов конкретные значения. Такой оператор всегда состоят из трех частей: имени переменной, или свойства, знака равенства и выражения, задающего нужное значение.
Оператор = присваивает переменной МоеЛюбимоеЧисло значение суммы переменной ДругоеЧисло и числа 12.
МоеЛюбимоеЧисло = ДругоеЧисло + 12В следующей строке кода, записывается, что свойству Color (Цвет) объекта AGraphicShape присваивается значение Blue (Синий) в предположении, что Blue является именованной константой:
AGraphicShape.Color = BlueВ следующеей строке, чтобы задать значение переменной КвадратныйКорень, для текущего значения переменной МоеЛюбимоеЧисло вызывается функция Sqr — встроенная функция VBA вычисления квадратного корня:
КвадратныйКорень = Sqr (МоеЛюбимоеЧисло)В VBA выражением называется любой фрагмент программного кода, задающий некоторое числовое значение, строку текста или объект. Выражение может содержать любую комбинацию чисел или символов, констант, переменных, свойств объектов, встроенных функций и процедур типа Function, связанных между собой знаками операции (например, + или *). Несколько примеров выражений:
Выражение |
Значение |
3.14 |
3.14 |
Xn*5 |
10 (в предположении, что Xn = 2) |
(12 - Sqr(x))/5 |
2 (в предположении, что х = 4) |
«Розы красные,» & « фиалки фиолетовые» |
Розы красные, фиалки фиолетовые |
Выполняемые операторы
Выполняемые операторы делают главную работу в программе и используются для выполнения следующих задач:
- вызов процедуры;
- активизация метода некоторого объекта;
- управление порядком, в котором должны выполняться другие операторы, посредством организации циклов или выбором участка программного кода (из нескольких альтернатив) для последующего выполнения;
- выполнение одного из встроенных операторов VBA или функции.
Пример. Оператор, вызывающий для выполнения метод Rotate объекта AGraphicShape:
AGraphicShape. Rotate(90)Запись нескольких операторов
Как правило, каждый оператор занимает одну строку программного кода, но VBA не обязывает уместить оператор в одной строке. Если оператор слишком длинный, можно разместить его в двух или более строках, добавив в конце каждой из строк (кроме последней) символ подчеркивания (_).
Можно сделать и наоборот — разместить несколько операторов в одной строке программного кода. Например,
Dim A As Integer, В As Integer: A = 3: B = 5: A = A +BЭта строка программного кода эквивалентна следующим четырем строкам:
Dim A As Integer, В As Integer A = 3 B = 5 А = А + ВСамыми простыми диалоговыми окнами являются окна сообщений (message boxes) — это диалоговые окна, которые выдают пользователю сообщения и снабжаются одной или более кнопками для выбора. В VBA они создаются с использованием функции MsgBox.
В своей самой простой форме MsgBox используется как оператор с одним аргументом – сообщением, которое должно отображаться. Например, приведенный ниже макрос создаёт сообщение, показанное на рисунке.
Sub Program () MsgBox "Это - окно сообщений" End SubMsgBox можно использовать для отображения числового значения.
Sub ShoeValue() Amount = 10 MsgBox Amount End SubПеременной Amount присваивается значение 10. На следующей строке для отображения значения Amount используется MsgBox. Вокруг Amount нет кавычек, поскольку это – значение переменной, которое нужно выдать на экран, а не слово "Amount".
Чтобы использовать вместе две отдельные строки в одном окне сообщения, следует использовать операцию конкатенации (&) — объединение.
Sub SayGoodNight() Name = "Саша" MsgBox "Пожелайте доброй ночи " & Name End SubПеременной Name присваивается строка "Саша". В строке кода с MsgBox задаётся текстовая строка "Пожелайте доброй ночи ", за которой следует & Name, указывая MsgBox присоединить значение переменной Name к предыдущей текстовой строке.
Опции MsgBox
необязательные аргументы, например, для того, чтобы вставить значок или изменить заголовок (title).
MsgBox "Это - замечательное окно сообщений", _vbExclamation, "Персональное окно"Существует четыре значка для окон сообщений. Каждый имеет определённое числовое значение, которое должно передаваться в качестве аргумента MsgBox. Однако вместо числа можно использовать константы со специальными именами, встроенные в VBA.
Таблица 1
Значки окна сообщений MsgBox
Отображение |
Константа |
Когда используется |
vbInformation |
для сообщения, не требующего ответа |
|
vbQuestion |
для того, чтобы задать вопрос |
|
vbExclamation |
для выдачи важной информации |
|
vbCritical |
для предупреждения |
MsgBox как функция
MsgBox является функцией и может возвращать значение, соответствующее той кнопке, которую нажимает пользователь. Одной из имеющихся опций окна сообщения является изменение кнопок, которое оно отображает. Вот окно сообщений, которое появляется, когда осуществляется выход из Excel, имея не сохраненные изменения в документе. Это окно имеет три кнопки.
После выбора соответствующей кнопки Excel получает информацию о том, какую кнопку выбрали.
Общий формат для функции MsgBox:
MsgBox(prompt [, buttons] [, title])где prompt — единственный обязательный аргумент. Для окна сообщений следует задавать текстовую строку с информацией. если вы хотите изменить заголовок, появляющийся в верхней части окна, задайте для заголовка (title) текстовую строку. По умолчанию используется заголовок Microsoft Excel.
Таблица 2 Комбинации кнопок MsgBox
Отображение |
Константа |
Когда используется |
vbOKOnly |
Когда не требуется от пользователя принятия решения |
|
vbOKCancel |
Когда окно сообщений объясняет возможное действие. Позволяет пользователю сделать выбор с помощью кнопки Отмена |
|
vbYesNo |
Альтернатива константе vbOKCancel, когда кажется, что это сделает окно сообщений более понятным |
|
vbYesNoCancel |
Для таких ситуаций, как выход или закрытие файлов без сохранения (подобно ситуации, показанной на рисунке выше) |
|
vbAbortRetryIgnore |
При ответе на сообщения об ошибках диска или файла |
|
vbRetryCancel |
При ответе на сообщения об ошибках диска или файла |
Если не указывать, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке Оk.
Примеры решения задач
Приведем несколько примеров решения задач на VBA.
Пример 1. Вычислить значение выражения a равного
, при x = 3, y = 2.5
Решение.
Sub выражение1() Dim A, x, y x = 3 y = 2.5 A = 2 * x - 3 * y MsgBox (A) End SubПояснение решения.
В строке Dim A, x, y объявляются переменные A, x, y.
Пример 2.
Пример 2. Вычислить значение выражения a равного
, при x = 3, y = 2.5
Замечание: значения x и y вводит пользователь.
Решение.
Sub выражение2() Dim A, x, y As Double x = InputBox("Введите x=") y = InputBox("Введите y=") A = 2 * x - 3 * y MsgBox (A) End SubПояснение решения.
В строке Dim A, x, y As Double описываются переменные A, x, y как числа двойной точности.
При использовании строки
x = InputBox("Введите x=")появиться окно
Пример 3
Пример 3. Вычислить значение выражения a равного
, при x = 3, y = 2.5
Замечание: значения x и y вводит пользователь, ответ выводится в виде «a = <значение>».
Решение.
Sub выражение3() Dim A, x, y As Double Dim ответ As String x = InputBox("Введите x=") y = InputBox("Введите y=") A = 2 * x - 3 * y ответ = "a=" + Str(A) MsgBox (ответ) End SubПояснение решения.
В строке Dim ответ As String описывается переменная ответ как строковая.
Код Str(A) преобразует значение переменной A в строку.
Пример 4
Пример 4. Вычислить значения выражений при x = 3, y = 2.5
,
,
,
,
Решение.
Sub выражение4() Dim A, b, c, d, a1, x, y As Double x = InputBox("Введите x=") y = InputBox("Введите y=") A = 2 * x - 3 * y b = (2 * x - 3 * y) / 2 c = (2 * x - 3 * y) / 2 * x d = (2 * x - 3 * y) / (2 * x) a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y) MsgBox ("a=" + Str(A)) MsgBox ("b=" + Str(b)) MsgBox ("c=" + Str(c)) MsgBox ("d=" + Str(d)) MsgBox ("a1=" + Str(a1)) End SubПример 5
Пример 5. Выполнить пример 4, другим способом, с помощью вспомогательных переменных.
Решение.
Sub выражение5() Dim A, b, c, d, a1, a2, b1, c1, c2, x, y As Double x = InputBox("Введите x=") y = InputBox("Введите y=") A = 2 * x - 3 * y b = (2 * x - 3 * y) / 2 c = (2 * x - 3 * y) / 2 * x d = (2 * x - 3 * y) / (2 * x) a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y) ‘ новое решение b1 = A / 2 c1 = b * x c2 = b / (2 * x) a2 = d + (5 - x) / (3 + y) MsgBox ("a=" + Str(A)) MsgBox ("b=" + Str(b)) MsgBox ("c=" + Str(c)) MsgBox ("d=" + Str(d)) MsgBox ("a1=" + Str(a1)) MsgBox ("b1=" + Str(b1)) MsgBox ("c1=" + Str(c1)) MsgBox ("c2=" + Str(c2)) MsgBox ("a2=" + Str(a2)) End SubПример 6
Пример 6. Вычислить площадь треугольника по трем известным сторонам. Например, a = 3, b = 4, c = 5.
Решение.
Sub Герон1() Dim A, b, c, p, s As Double A = 3 b = 4 c = 5 p = (A + b + c) / 2 s = Sqr(p * (p - A) * (p - b) * (p - c)) MsgBox ("s=" + Str(s)) End SubПояснение решения.
Для решения задачи используется формула Герона.
Пример 7
Пример 7. Вычислить площадь треугольника по трем известным сторонам.
Решение.
Sub Герон2() Dim A, b, c, p, s As Double A = Val(InputBox("Введите a=")) b = Val(InputBox("Введите b=")) c = Val(InputBox("Введите c=")) p = (A + b + c) / 2 s = Sqr(p * (p - A) * (p - b) * (p - c)) MsgBox ("s=" + Str(s)) End SubПояснение решения.
Код Val(InputBox("Введите a=")) преобразует введенное значение через InputBox в число, так как InputBox возвращает строку. Если такого преобразования не сделать, то программа правильно вычислять s не будет.
Пример 8
Пример 8. Вычислить гипотенузу прямоугольного треугольника по двум катетам.
Решение.
Sub гипотенуза() Dim a, b, c, p, s As Double a = Val(InputBox("Введите a=")) b = Val(InputBox("Введите b=")) c = Sqr(a ^ 2 + b ^ 2) MsgBox ("c=" + Str(c)) End Subitteach.ru
Примеры работы с диалоговыми сообщениями (msgbox) в VBA
В статье "Примеры макросов в Excel. Диалоговое VBA сообщение msgBox" мы вкратце познакомились с диалоговым сообщением msgbox. Но это было простейшее информационное сообщение. Теперь рассмотрим подробнее работу с функцией MsgBox и все виды диалоговых сообщений.
Синтаксис функции MsgBox
Функция MsgBox имеет следующий синтаксис:
MsgBox ( сообщение [, константы сообщения] [, заголовок] [, файл справки hlp, контекст справки])
Обязательным параметром является «Сообщение», остальные могут быть опущены.
MsgBox “Текст сообщения”
- Константы сообщения - позволяют определить вид диалогов.
- Заголовок – задает заголовок формы диалога.
- Файл справки hlp - строковое выражение, указывающее имя файла справки для диалогового окна.
- Контекст справки - числовое выражение, указывающее номер контекста файла справки для диалогового окна.
Диалоговое окно вида:
создается следующей командой:MsgBox "Текст содержащий вопрос", vbYesNo, "Название сообщения"
Для создания сообщения такого вида:
команда будет выглядеть так:MsgBox "Текст содержащий вопрос", vbYesNoCancel, "Название сообщения"
Сообщение такого вида:
создается командой:MsgBox "Текст содержащий вопрос", vbAbortRetryIgnore, "Название сообщения"
т.е. из всех трех примеров в команде меняется только второй параметр (vbYesNo, vbYesNoCancel, vbAbortRetryIgnore). Это и есть значения (константы) определяющие вид сообщения. Параметры (vbYesNo, vbYesNoCancel) могут быть заменены на числовое значение, например диалог vbYesNo можно вызвать, указав 4: MsgBox "Текст содержащий вопрос", 4, "Название сообщения".
Ниже приведен полный список констант и эквивалентных им цифровых значений:
Константа | Значение | Описание |
vbOKOnly | 0 | Выводит сообщение с кнопкой OK |
vbOKCancel | 1 | Выводит сообщение с кнопками OK и Отмена |
vbAbortRetryIgnore | 2 | Выводит сообщение с кнопками Прервать, Повтор, Пропустить |
vbYesNoCancel | 3 | Выводит сообщение с кнопками Да, Нет, Отмена. |
vbYesNo | 4 | Выводит сообщение с кнопками Да и Нет |
vbRetryCancel | 5 | Выводит сообщение с кнопками Повтор и Отмена |
В сообщениях можно слегка изменить внешний вид, назначить кнопку по умолчанию, добавить кнопку "Справка" путем сложения констант.
Например: MsgBox "Текст содержащий вопрос", vbYesNoCancel+vbInformation+vbMsgBoxHelpButton+vbDefaultButton2, "Название сообщения" построит сообщение вида:
vbInformation - добавляет иконку восклицания в сообщениеvbMsgBoxHelpButton - добавляет кнопку "Справка"vbDefaultButton2 - устанавливает фокус на второй кнопке ("Нет")
Ниже таблица со списком констант иконок и констант, устанавливающих фокус на кнопках:
Константа | Значение | Описание |
vbCritical | 16 | Выводит иконку критического сообщения (красный овал с крестом) |
vbQuestion | 32 | Выводит иконку с вопросительным знаком |
vbExclamation | 48 | Выводит иконку с восклицательным знаком (в желтом треугольнике) |
vbInformation | 64 | Выводит иконку информационного сообщения |
vbDefaultButton1 | 0 | Устанавливает фокус по умолчанию на первой кнопке |
vbDefaultButton2 | 256 | Устанавливает фокус по умолчанию на второй кнопке |
vbDefaultButton3 | 512 | Устанавливает фокус по умолчанию на третьей кнопке |
vbDefaultButton4 | 768 | Устанавливает фокус по умолчанию на четвертой кнопке |
vbMsgBoxHelpButton | 16384 | Добавляет кнопку Справка |
vbMsgBoxRight | 524288 | Выравнивание текста сообщения по правой стороне |
vbMsgBoxRtlReading | 1048576 | Зеркально переворачивает все элементы в сообщении (см. снимок ниже) |
Как узнать какую кнопку в сообщении нажал пользователь?
Определяться выбор пользователя будет с помощью условия IF. В некоторых ситуациях можно использовать Select Case.
Например, вызовем сообщение двойным нажатием ЛКМ по любой ячейке на листе. В соответствии с выбором пользователя, выведем в эту ячейку текст.
Создаем новую книгу Excel и переходим в режим Visual Basic (Alt+F11). В окне проекта выбираем «Лист1» и кликаем по нему два раза ЛКМ.
В открывшемся окне редактора кода вводим следующую процедуру:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If MsgBox("Текст содержащий вопрос", vbYesNo, "Название сообщения") = vbYes Then Selection = "Нажата ДА"Else Selection = "Нажата Нет"End If End Sub |
В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да», тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.
Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.
Второй вариант вызова диалога с помощью Select Case.
Создадим вторую процедуру на Листе 2. Код процедуры следующий:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Dim mesmes = MsgBox("Текст содержащий вопрос", vbYesNoCancel + vbInformation + vbDefaultButton2, "Название сообщения") Select Case mes Case vbYes: Selection = "Нажата ДА" Case vbNo: Selection = "Нажата НЕТ" Case vbCancel: Selection = "Нажата Отмена"End Select End Sub |
В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.
Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.
Перечень констант и значений, возвращаемых функцией MsgBox:
Константа | Значение | Кнопка |
vbOK | 1 | OK |
vbCancel | 2 | Отмена |
vbAbort | 3 | Прервать |
vbRetry | 4 | Повтор |
vbIgnore | 5 | Пропустить |
vbYes | 6 | Да |
vbNo | 7 | Нет |
Прикрепленный файл: msgbox.zip
pnbsp;сообщения
www.programm-school.ru
Функции VBA Функция - это подпрограмма, которая выполняет действия и возвращает единственное значение. В VBA различают следующие виды функций:- встроенные функции,- функции, определённые пользователем.Встроенные функции Ниже представлены таблицы с кратким описанием наиболее часто используемых функций VBA.Математические функции N означает любое численное выражение. Все аргументы функций являются обязательными, если не указано иначе.
Функции преобразования данных N - любое численное значение; S - любое строковое значение; E - выражение любого типа. Аргументы каждой функции являются обязательными, если не указано иначе.
Функции даты и времени N - любое допустимое численное значение; D - любое допустимое выражение типа Date (либо выражение, которое может быть преобразовано к типу Date). Аргументы каждой функции являются обязательными, если не указано иначе.
Строковые функции N - любое допустимое численное значение; S - любое допустимое строковое значение. Аргументы каждой функции являются обязательными, если не указано иначе.
Примеры использования функций VBA Рекомендуемые страницы: Читайте также: ©2015 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. | Почему 3458 студентов выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |
megaobuchalka.ru