Организация ввода и вывода сообщений. Примеры 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 послужил один и тот же язык программирования, веро­ятно, многим придет в голову мысль воспользоваться им. Точно так же, как пользователям Win­dows для подготовки множества программ необходимо освоить один интерфейс, в 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 Sub

MsgBox можно использовать для отображения числового значения.

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 Sub

itteach.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 различают следующие виды функций:- встроенные функции,- функции, определённые пользователем.

Встроенные функции

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

Математические функции

N означает любое численное выражение. Все аргументы функций являются обязательными, если не указано иначе.
Функция(аргумент) Действие
Abs(N) Возвращает абсолютное значение аргумента N
Atn(N) Возвращает арктангенс N (радиан)
Cos(N) Возвращает косинус N (радиан)
Fix(N) Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое большее, чем или равное N
Rnd(N) Возвращает случайное число: аргумент является необязательным. Используется только после инициализации генератора случайных чисел (оператор Randomize)
Sgn(N) Возвращает знак числа: -1, если N - отрицательное; 1, если N - положительное; 0, если N равно 0
Sin(N) Возвращает синус N (радиан)
Sqr(N) Возвращает корень квадратный из N. Если N является отрицательным числом - возвращается ошибка времени исполнения
Tan(N) Возвращает тангенс N (радиан)

Функции преобразования данных

N - любое численное значение; S - любое строковое значение; E - выражение любого типа. Аргументы каждой функции являются обязательными, если не указано иначе.

 

Функция(аргумент) Действие
Chr(N) Возвращает строку из одного символа, соответствующего коду символа N, который должен быть числом между 0 и 255 (обратна предыдущей)
Format(E,S) Возвращает строку, содержащую значение, представленное выражением Е, в формате в соответствии с инструкциями, содержащимся в S
RGB(N,N,N) Возвращает целое типа Long, представляющее значение основных цветов изображения. N для каждого аргумента должно быть целым и лежать в пределах от 0 до 255
Str(N) Возвращает строку, эквивалентную численному выражению N
Val(S) Возвращает численное значение, соответствующее числу, представленному строкой S, которая должна содержать только цифры и одну десятичную точку, иначе возвращается 0
CDate(E) Возвращает значение типа Date. E может быть любым допустимым выражением (строкой или числом), представляющим дату в диапазоне 1/1/100 - 12/31/9999
CInt(E) Возвращает численное значение типа Integer. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число
CStr(E) Возвращает численное значение типа String. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

Функции даты и времени

N - любое допустимое численное значение; D - любое допустимое выражение типа Date (либо выражение, которое может быть преобразовано к типу Date). Аргументы каждой функции являются обязательными, если не указано иначе.

Функция(аргумент) Действие
Date Возвращает системную дату
Time Возвращает системное время
Now Возвращает системные дату и время
Year(D) Возвращает целое, являющееся частью выражения типа Date и содержащее год. Год возвращается как число между 100 и 9999
Month(D) Возвращает целое, являющееся частью выражения типа Date и содержащее месяц. Месяц возвращается как число между 1 и 12
Day(D) Возвращает целое, являющееся частью выражения типа Date и содержащее день. День возвращается как число между 1 и 31
Hour(D) Возвращает целое, содержащее часы как часть времени, содержащегося в выражении типа Date. Часы возвращаются как число между 0 и 23. Если аргумент не содержит значения времени, то возвращается 0
Minute(D) Возвращает целое, содержащее минуты как часть времени, содержащегося в выражении типа Date. Минуты возвращаются как число между 0 и 59. Если аргумент не содержит значения времени, то возвращается 0
DateValue(E) Возвращает значение типа Date, эквивалентное дате, заданной аргументом Е, который может быть строкой, числом или константой, представляющей время
TimeValue(E) Возвращает значение типа Date, содержащее время, заданное аргументом Е, который может быть строкой, числом или константой, представляющей время

 

Строковые функции

N - любое допустимое численное значение; S - любое допустимое строковое значение. Аргументы каждой функции являются обязательными, если не указано иначе.

Функция(аргумент) Действие
InStr(N1,S1,S2,N2) Возвращает положение S2 в S1. N1 - начальное положение для поиска. N2 определяет, следует ли выполнять поиск с учетом регистра. N1, N2 - необязательные аргументы
Lcase(S) Возвращает строку (тип String), содержащую копию S со всеми символами верхнего регистра, преобразованными в символы нижнего регистра
Left(S,N) Возвращает строку: копирует N символов из S, начиная с левого крайнего символа S
Len(S) Возвращает число символов в S, включая начальные и конечные пробелы
Ltrim(S) Возвращает копию строки S после удаления символов пробела из левой части строки (начальные пробелы)
Mid(S,N1,N2) Возвращает строку: копирует N2 символов из S, начиная с позиции символа в S, заданной аргументом N1. N2 - необязательный аргумент, если он опущен, то возвращаются все символы в строке S от позиции N1 до конца строки
Right(S,N) Возвращает значение типа String: копирует N символов из S, начиная с правого крайнего символа S
Rtrim(S) Возвращает копию строки S после удаления символов пробела из правой части строки (конечные пробелы)
Space(N) Возвращает строку пробелов длиной N символов
StrComp(S1,S2,N) Сравнивает S1 с S2 и возвращает число, обозначающее результат сравнения: -1, если S1<S2; 0 - S1=S2; 1 - S1>S2. N является необязательным аргументом и указывает следует ли выполнять сравнение с учетом регистра
StrConv(S,N) Возвращает строку, преобразованную в новую форму в зависимости от числового кода, заданного аргументом N. VBA предоставляет внутренние константы для использования с функцией StrConv. Наиболее полезными являются: vbProperCase (преобразует строку так, что каждая буква, начинающая слово, становится заглавной), vbLowerCase (преобразует строку в буквы нижнего регистра) и vbUpperCase (преобразует строку в буквы верхнего регистра)
String(N,S) Возвращает строку длиной N символов, состоящую из символа, заданного первым символом в S
Trim(S) Возвращает копию строки S после удаления начальных и конечных символов пробела из этой строки
Ucase(S) Возвращает S со всеми символами нижнего регистра, преобразованными в символы верхнего регистра

Примеры использования функций VBA

Рекомендуемые страницы:

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

©2015 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.

Почему 3458 студентов выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы

megaobuchalka.ru