Введение
C WinAPI — это интерфейс прикладного программирования, который используется для создания приложений Windows. Для начала работы начинающий пользователь должен загрузить SDK Windows, ранее известный как Platform SDK.
Содержит файлы заголовков, библиотеки, образцы, документацию и инструменты, которые используются для разработки приложений. API для языков программирования C и C ++. Это самый прямой способ создания приложений в операционной системе от компании.
C WinAPI можно разделить на несколько областей:
пользовательский интерфейс;
мультимедиа;
оболочка Windows;
сетевые службы.
Базовые службы обеспечивают доступ к основным ресурсам. К ним относятся функции C WinAPI, файловые системы, устройства, процессы, потоки, реестр и обработка ошибок. Область безопасности предоставляет интерфейсы, объекты и другие элементы программирования для аутентификации, авторизации, криптографии и других связанных с безопасностью задач. Подсистема графики обеспечивает функциональность вывода графического содержимого на мониторы, принтеры и другие устройства вывода. Пользовательский интерфейс обеспечивает функциональность для создания окон и элементов управления.
Компонент мультимедиа предоставляет инструменты для работы с видео, звуковыми и входными устройствами. Функции интерфейса оболочки позволяют приложениям получать доступ к функциям, предоставляемым оболочкой операционной системы. Сетевые службы предоставляют доступ к сетевым возможностям ОС Windows.
Pelles C
Pelles C — бесплатная программа и лучший компилятор C и интегрированная среда разработки (IDE) для языка программирования C. Поддерживает 32-разрядную Windows (x86) и 64-разрядную Windows (x64). Реализует как стандарты C99, так и C11. Pelles C имеет встроенный редактор ресурсов, растровое изображение, значок и редактор курсоров и редактор шестнадцатеричных дампов. Он разработан шведским разработчиком Пелле Ориниусом. Название компилятора носит имя своего автора. Поставляется с SDK, поэтому программист сразу может приступить к созданию приложений без дальнейшей установки.
Что делать разработчикам VB
В конце 2020 года Microsoft планирует выпустить релиз платформы .NET 5.0, которая объединит .NET Framework и .NET Core. Новая версия платформы, как и .NET Core, будет поддерживать Visual Basic, но без добавления новых функций для развития языка.
VB все еще востребован среди некоторых разработчиков. За период двадцатилетнего существования язык продемонстрировал свою стабильность. Поэтому компания пока не отказывается от поддержки языка на новой платформе. Кроме того, в Visual Studio периодически добавляют новые функции, которые будет полезны и для разработчиков Visual Basic на .NET Core или .NET Framework – например, поддержку сервиса подсказок по коду IntelliCode для работы с Visual Basic.
Если более ранние версии .NET Core поддерживали только типы библиотек классов и консольных приложений, то на платформе .NET 5 для Visual Basic будут поддерживаться:
- Class Library
- Console
- Windows Forms
- Windows Presentation Foundation (WPF)
- Worker Service
- ASP.NET Core Web API
Минусом для разработчиков станет то, что не все наследуемые решения будут поддерживаться в дальнейшем. Например, приложения, созданные с использованием таких технологий, как WebForms, Workflow или Windows Communication Foundation. Причина – VB, написанный на платформе .NET Core будет несколько отличаться от VB, написанного на предыдущих версиях .NET Framework, в силу различий и в самих платформах. Для таких приложений придется использовать более ранние версии классического .NET Framework. Здесь эти программы будут работать до тех пор, пока не прекратится поддержка версий Windows, на которых они были установлены изначально.
Аргументы
Процедуры могут получать значения через аргументы, указанные при их объявлении. Например, вам необходимо создать подпрограмму, которая добавляет целочисленное значение в каждую ячейку в выбранном диапазоне документа. Вы можете поставить целочисленное значение через аргумент, как в данном примере:
Sub AddToCells(i As Integer)
.
.
.
End Sub
Опциональные аргументы
Также ряд процедур VBA могут иметь опциональные аргументы, применяемые пользователем в случае необходимости, но они могут и пропускаться. В последнем случае процедура использует определенные по умолчанию значения.
Вернемся к описанному примеру. Если мы хотим объявить аргумент как опциональный, это делается следующим образом:
Sub AddToCells(Optional i As Integer = 0)
Тогда аргумент i стандартно будет равняться нулю. Функция может содержать несколько необязательных аргументов. При перечислении их необходимо вставлять в конец списка.
Два способа передачи аргументов
Аргументы могут передаваться функциям несколькими способами:
Вы можете уточнять — аргумент передается процедуре по значению или по адресу в памяти — с помощью соответствующего ключевого слова (ByVal или ByRef) на этапе определения процедуры.
Пример:
Sub AddToCells(ByVal i As Integer)
. . . End Sub |
Здесь целочисленная переменная i передается по значению. Любые изменения, которые вносятся в нее, теряются, как только подпрограмма завершается. |
Sub AddToCells(ByRef i As Integer)
. . . End Sub |
Здесь тот же целочисленный аргумент передается по адресу в памяти. Когда подпрограмма завершается, любые изменения, которые совершены, запоминаются. |
По умолчанию аргументы передаются по адресу. Следовательно, если не использовать ключевого слова, аргументы будут передаваться исходя из адреса в памяти и будут сохранены после окончания работы подпрограммы.
Перед обсуждением других свойств функций и подпрограмм VBA, необходимо посмотреть на два типа процедур еще раз, чтобы легче было разобраться в дальнейшем материале. Далее мы рассмотрим более подробно каждую из этих функций.
Ранний выход
Если необходимо выйти из функции или подпрограммы перед ее остановкой (например, если будет получена ошибка), можно использовать операторы Exit Function или Exit Sub в зависимости типа процедуры, который необходимо преждевременно завершить. Ниже мы приведем пример процедуры, ждущей, пока ей передадут число выше нуля. Если вдруг она получает отрицательное значение, функция прекращает свою работу и возвращает ошибку.
Function VAT_Amount(sVAT_Rate As Single) As Single
VAT_Amount = 0
If sVAT_Rate <= 0 Then
MsgBox «Expected a Positive value of sVAT_Rate but Received » & sVAT_Rate
Exit Function
End If
…
End Function
Важно учитывать, что перед выходом из процедуры приведенный выше код использует встроенную в VBA функцию MsgBox, которая демонстрирует диалоговое окно. Она может принимать следующие аргументы:
Она может принимать следующие аргументы:
- Prompt. Текст, который отображается в диалоговом окне. Обязательный аргумент. Все остальные – опциональные.
- Buttons. Аргумент, который определяет количество кнопок, которые будут отображаться диалоговым окном. Может принимать несколько значений. Например, если он содержит значение vbOKCancel, диалоговое окно будет иметь только две кнопки: ОК и “Отменить”. Но в нашем случае лучше всего подходит значение vbYesNo.
- Title. Определяет заголовок диалогового окна.
- HelpFile. Позволяет привязать к окну справочный файл.
- Context. ID элемента справки. Обязательный аргумент, если используется HelpFile.
После того, как пользователь нажал определенную кнопку, функция возвращает определенное значение. Следовательно, приведенный выше код может модифицироваться в зависимости от задач. Например, спросить пользователя, не хотел бы он изменить значение переменной sVAT_Rate, и если пользователь нажимает «Да», то сделать его положительным. Предварительно нужно прописать переменную.
Здесь можно проявить фантазию. Но вообще, использование диалогового окна в макросах – это совсем другая тема, которая в данном случае требует еще и умения использовать условные операторы для выполнения действий. Главное, что вы умеете определять функции и знаете их типы и основные отличия между ними. Все остальное придет с практикой и желанием непрерывно обучаться. Удачи.
Функции VBA
Чтобы определить функцию в VBA, необходимо прописать следующие операторы:
Function
.
.
.
End Function
Как было указано ранее, функции VBA возвращают значение. Этот процесс осуществляется по следующим правилам:
- Тип данных возвращаемого значения должен определяться в заголовке функции.
- Значение, которое возвращается, должно назначаться переменной, имеющей такое же имя, как и функция. Эта переменная не обязательно должна быть определена, поскольку она уже является частью функции.
Все это можно показать на примере, который вы увидите ниже.
Процедура «Function»: выполнение операции с тремя числовыми значениями
Приведем пример простой функции, получающей три аргумента, каждый из которых является плавающим значением двойной точности (тип Double). В результате вычислений функция возвращает еще одно значение этого же типа, являющееся суммой двух первых аргументов, от которой отнимается третий.
Function SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double
SumMinus = dNum1 + dNum2 — dNum3
End Function
Это элементарная процедура типа «Function», которая показывает способ, которым информация может передаваться процедуре. Также видно, что функция возвращает тип, который определяется как «Double» (такая команда дается интерпретатору с помощью ключевых слов As Double после приведения всех аргументов). Также этот пример демонстрирует, как сохраняется результат, возвращенный процедурой этого вида в переменной, которая имеет такое же имя, как и сама процедура.
Вызов функции
Если приведенный выше пример функции интегрирован в модуль в редакторе, его можно выполнить с других функций или непосредственно с листа в документе.
Вызов функции из иной функции
Функция может быть выполнена и из иной процедуры с помощью присваивания переменной к ней. В данном примере демонстрируется обращение к определенной ранее функции SumMinus.
Sub main()
total = SumMinus(5, 4, 3)
End Sub
Вызов с листа
Также можно вызывать процедуру непосредственно с листа способом, аналогичным встроенным. Например, так:
=SumMinus(10, 5, 2)
Почему API так популярны у программистов
Так почему же api стал настолько популярным инструментом у современных разработчиков:
- Программный интерфейс предоставляет возможность пользоваться уже готовыми инструментами. Скажем, функции библиотеки для машинного обучения уже упоминаемого выше TensorFlow помогут сразу быстро и безопасно сделать нейросеть, вместо того, чтобы тратить деньги, время и нервы на создание новых инструментов для разработки нейросети;
- Различные модули Api значительно увеличивает безопасность. Во время программирования все данные и скрытый функционал, которые не должны попасть в чужие руки, могут быть скрыты в отдельном приложении. Таким образом, те люди, которые не должны видеть или использовать эти функции во время работы с приложением, даже не обнаружат у себя этот кусок информации;
- Интерфейс приложения позволяет быстро создать связь между совершенно разными системами. Необходимо вам для магазина подключить авторизацию через социальные сети, чтобы пользователям было проще создавать личный кабинет? Хотите подключить платёжную систему, чтобы клиенты могли прямо на сайте оплатить покупки? Вот тут-то на помощь и приходит api;
- Экономия денежных средств. Обычно гораздо дешевле использовать платный api, нежели создавать нужные функции самому, выделяя под это команду и бюджет;
- Кроме того, сторонние программные интерфейсы приложения в основном создаются целыми коммерческими компаниями или большими сообществами профессиональных программистов, поэтому они могут похвастаться повышенной безопасностью.
Как происходит вызов функций API
Разберем вызов функций на примере методов библиотек на языке Python:
Чтобы предоставить функции через интернет, нужно отправить на сервер HTTP-запрос в формате JSON.
Например, запрос для озвучки текста с помощью API Yandex.SpeechKit выглядит следующим образом:
Косвенные вызовы API
Кроме вызовов API напрямую, существуют и косвенные вызовы, осуществляемые при помощи разработчика или специальных программ для тестирования функций.
Стоит отметить, что не только программист может взаимодействовать с API, но и сам пользователь. Например, когда пользователь нажимает кнопку «Вернуться назад» в браузере, он тоже взаимодействует с API через графический интерфейс.
Модули. Процедуры
Для хранения кода VBA применяются модули – самостоятельные объекты, каждый из которых содержит одну или несколько процедур.
На языке VBA процедура — это самостоятельная замкнутая программная единица, включающая операторы описания локальных данных процедуры и операторы, которые выполняются в ней.
Процедура выполняется автоматически в ответ на событие. События возникают в результате действий пользователя или выполнения программы; их может генерировать система.
Типы процедур.
– процедуры-подпрограммы Sub;
общий формат:
Sub
<тело процедуры >End Sub
Процедура-подпрограмма Sub выполняет действия, может иметь не один ответ (результат), содержать вызовы других процедур и вызываться на выполнение из других процедур;
– процедуры-функции Function;
общий формат:
Function
<операторы>End Function
Процедура-функция возвращает единственное значение (полученное в результате расчета, возврат текущей даты и др.). После того как она определена (создана), к ней можно обращаться как к встроенной функции.
Процедуры обоих типов могут иметь аргументы – переменные, значения которых определяют работу процедуры при конкретном вызове.
Область действия процедур:
– общая (Public) – процедура доступна для всех процедур во всех модулях;
– личная (Private) – процедура доступна для других процедур только в том модуле, в котором она объявлена.
Если процедуры не используются вне данного модуля, их следует декларировать как личные процедуры. При объявлении личной процедуры в первой строке перед ключевым словом Function или Sub вставляется префикс Private:
Private Function Имя ()
или
Private Sub Имя () .
Синтаксис процедур в VBA.
Рассмотрим синтаксис на примере процедуры-подпрограммы.
Процедуры начинаются ключевым словом Sub.
Ключевое слово — это слово или символ, которые распознаются как элемент языка VBА.
Sub имя ()
<тело_процедуры >
<тело_процедуры >End Sub
При записи нескольких операторов в одной строке надо отделять их двоеточием (:).
Создание процедуры:
- Открыть редактор VBA.
- Создать модуль Insert–Modul.
- Insert–Procedur–Sub (или Function) (Вставка–Процедура– Подпрограмма (или Функция)).
- Набрать текст процедуры.
- По команде Debug–Compile VBAproject (Отладка–Компилировать) выполнить отладку процедуры.
- Командой Файл–Сохранить сохранить созданную процедуру.
Кодировка символьных данных: форматы ANSI и UNICODE
В кодировке ANSI (применяемой в Visual
FoxPro) каждый
символ определяется одним байтом, то есть
максимальное количество символов равно 256,
что, конечно, очень мало. Например, при
русификации часть стандартных символов ANSI
заменяется на символы кириллицы. А в
некоторых алфавитах, например, японской
кане, столько символов, что одного байта для
их кодировки просто недостаточно
Для
поддержки таких языков, и, что более важно,
для облегчения «перевода» программ на
другие языки, была разработана кодировка
Unicode. Каждый символ в Unicode состоит из
двух байтов, что позволило расширить набор
допустимых символов до 65536
Достаточно
большое количество функций Windows API
используют при работе с символьными
строками формат Unicode. Для работы с
такими функциями необходимо выполнять
конвертирование символьных данных из одного формата в другой.
Встроенная функция Visual FoxPro STRCONV
выполняет конвертирование строк как из
формата ANSI в UNICODE, так и обратно. Вот её
синтаксис:
STRCONV(cExpression, nConversionSetting [, nRegionalIdentifier [, nRegionalIDType]])
Параметр cExpression — это строка,
которую необходимо конвертировать.
Параметр nConversionSetting указывает характер
конвертирования. Из всех его возможных
значений нас интересуют только два:
- 5 — конвертирование из ANSI в UNICODE
- 6 — конвертирование из UNICODE в ANSI
Необязательные параметры nRegionalIdentifier
и nRegionalIDType определяют дополнительные
региональные настройки и могут быть
безболезненно проигнорированы.
Ниже показаны примеры
использования функции STRCONV:
cUnicodeString = STRCONV(cANSIString, 5) && Конвертирование в Unicode cANSIString = STRCONV(cUnicodeString, 6) && Конвертирование в ANSI
Возможно, при прочтении этого
раздела у вас сложилось впечатление, что
работать с Windows API функциями в Visual FoxPro
достаточно просто. И да, и нет. Например,
некоторые API функции используют типы данных,
не поддерживаемые в команде DECLARE..DLL,
например, 64-х разрядные целые числа. Так же
есть ряд функций, называемых функциями
обратного вызова. В прототипе такой функции
перед описанием возвращаемого типа
присутствует модификатор CALLBACK. К сожалению,
вы не можете использовать такие функции, по
крайней мере, напрямую. Так же бывает, что
структура содержит указатель на функцию —
такие API в Visual FoxPro так же нельзя
использовать.
Почему разработчики его используют
Есть ещё 4 важные причины, по которым разработчики так часто обращаются к api:
- Программный интерфейс помогает быстрее и проще создавать новые приложения. Зачем изобретать велосипед и колесо, если можно взять разработки товарищей? Скажем, никто не запрещает воспользоваться api нейронной сети TenserFlow для создания своей программы, чтобы не тратить время на разработку собственной системы машинного обучения.
- Как уже отмечено ранее, апи помогает увеличить безопасность разработки. Интерфейс позволяет перенести важные функции в стороннее приложение, чтобы их невозможно было некорректно использовать. Это решение отлично спасает от человеческого фактора и глупых случайностей.
- Подключение api позволит проще настраивать связь между различными сервисами и утилитами. Система способна свести к нулю лишнее общение между программистами разных компаний. Это отличная возможность получения нужных функций сторонних приложений, не сотрудничая и даже не общаясь с создателями этих приложений.
- Готовые интерфейсы помогают не только сохранить время и силы разработчиков, но и деньги, которые не нужно будет тратить на создание важных функций.
Базовые типы данных Си
Если вы знакомы с языком
программирования Си, то знаете, как легко в
нём можно создавать различные типы данных.
Достаточно написать следующий код:
typedef int INT32;
и вот у вас новый тип INT32, который
полностью соответствует типу int. Но, с точки
зрения Си, это совершенно разные типы, и
попытка присвоить переменной типа INT32
значение переменной типа int приведёт к
ошибке!
Изобилие типов данных заставляет многих
разработчиков думать, что программирование
с использованием API является трудным. Но это
не так! В Си в основном используются
следующие типы данных:
-
тип char — символ в
формате ANSI. Имеет длину 8 разрядов (один
байт). -
тип wchar — символ в
формате Unicode. Имеет длину 16 разрядов (два
байта). -
тип int — целые числа. Они
делятся в Си на три типа: int, short int и
long int. Последние обычно сокращаются до
short и long. Тип short — это 16-ти
разрядное, а типы int и long — 32-х
разрядные целые числа. -
тип float — вещественные числа,
имеющие дробную часть. Имеют длину 32
разряда (4 байта). -
тип double — вещественные
числа двойной точности. Имеют длину 64 разряда (8 байт). -
тип enum — перечисляемый
тип данных. -
тип void используется для
обозначения величин, имеющих нулевую
длину и не имеющих значения. -
тип pointer — указатель; он не содержит
информацию в общепринятом смысле — как
другие типы Си; вместо этого, в каждом
указателе находится адрес ячейки памяти,
где хранятся реальные данные. Имеет длину
32 разряда (4 байта).
Как ни странно, строковый тип в Си отсутствует. На самом деле все строки
представлены в Си как массивы символов.
Некоторые типы могут объявляться
как беззнаковые. Модификатор unsigned (без
знака) используется со следующими
типами данных: char, short, int и long.
Например, следующее объявление
переменной в Си:
usigned int имя_переменной;
означает, что эта переменная —
целое 32-х разрядное целое без знака.
Модификатор const указывает,
что переменная указанного типа является
константой, то есть её значение не может
быть изменено.
Перечисляемый тип enum связывает с переменной набор именованных
констант, называемых перечисляемыми
константами. Объявление перечисляемого
типа выглядит так:
enum поле_тега { const1, const2, ... } переменная;
Если поле_тега
опускается, то после закрывающей фигурной
скобки необходимо указать переменную.
Если поле_тега указано, то
не указывается переменная.
Исторически сложилось так, что
тип enum равнозначен типу int — то есть
переменная перечисляемого типа занимает в
памяти 4 байта. Каждая перечисляемая
константа
имеет значение, определяемое её порядковым номером
в списке; нумерация
начинается с нуля. Рассмотрим перечисление
CombineMode:
enum CombineMode{ CombineModeReplace, CombineModeIntersect, CombineModeUnion, CombineModeXor, CombineModeExclude, CombineModeComplement };
В этом перечислении константа CombineModeReplace имеет значение 0,
константа CombineModeIntersect
имеет значение 1, и так далее; константа CombineModeComplement имеет значение 5.
Значения перечисляемых констант
могут быть указаны явно, как, например, в следующем примере:
enum DashCap{ DashCapFlat = 0, DashCapRound = 2, DashCapTriangle = 3 };
Перечисленные типы данных покрывают 99%
всех типов данных, используемых в
программировании Windows API. Это звучит слишком
просто, не так ли? Почему же описания API функций
содержат все эти типы — HWND, HINSTANCE, POINT и им
подобные?
Причиной тому является то, что Cи имеет
особенность, называемую strict-typing.
Однажды появившись, переменная одного типа
может принимать только те значения, которые
соответствуют ее типу. Вы не можете сначала
сохранить в переменной строку, а затем
присвоить ей число. В Visual FoxPro
мы обычно стараемся симулировать подобное
путем соглашения о наименованиях. Например,
cName представляет собой переменную символьного
типа,
тогда как nCount — числовую. Strict-typing
позволяет создать новый тип данных, присвоив
существующему типу данных новое имя. Каждый
новый тип представляется отличным от
других типов, несмотря на то, что внутренне
они хранят одно и то же.
Windows усложняет использование этой
концепции. К примеру, тип LONG в
действительности представляет собой long int,
а тип UINT — unsigned int. Оба типа являются 32-разрядными
целыми числами. Производные типы данных
определяются в различных include-файлах (файлы
с расширением .h). Если вы приобрели Visual
Studio.NET, то можете найти эти файлы в папке ..\VC7\PlatformSDK\Include\.
Что значит API?
Этот термин расшифровывается как Application Programming Interface, что в переводе на русский значит «Программный Интерфейс Приложения». Аббревиатура API используется часто и на слуху у многих пользователей, взаимодействующих с компьютерами (даже далеких от программирования). Правда, популярность термина не сделала его особо понятнее. Для многих это все еще набор символов без четкого значения. В лучшем случае пользователи в ответ на вопрос «Что такое API» скажут, что это инструмент для взаимодействия нескольких программ, в худшем – не скажут ничего.
И первые будут правы, потому что программный интерфейс включает в себя функции, классы, методы и структуры, помогающие одному приложению взаимодействовать с другим. API содержит в себе некие «мостики», позволяющие программе А получить доступ к данным из программы Б или к некоторым ее возможностям. Таким образом, программисты могут расширять функциональность своего продукта и связывать его с чужими разработками.
Все это с разрешения создателей программы А и с соблюдением всех мер безопасности, чтобы разработчики, желающие использовать API, не смогли получить доступ к конфиденциальной информации.
Главный принцип работы API. Почему его называют интерфейсом
Простыми словами, интерфейс – это «прослойка» между приложением А и приложением Б. В ней происходят процессы, которые позволяют двум программам обмениваться информацией и выполнять функции, связанные с обеими сторонами, скрывая «внутреннее строение» программ. Знакомо? Только что таким же образом мы описали API.
Такой подход позволяет наладить взаимодействие между несколькими утилитами, не задумываясь о том, как они устроены, какая программная логика ими движет и каким образом обрабатываются передаваемые данные. Интерфейсы упрощают работу как для простых пользователей, так и для программистов. Первым не приходится задумываться о том, что стоит за привычными функциями в их гаджетах, а разработчикам не нужно изучать код других программистов, чтобы подключить чужой продукт к своему.
Это называется инкапсуляцией. Сокрытием части функций ради упрощения работы в целом и минимизации участков программного обеспечения, где один из разработчиков мог бы допустить ошибку.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Ссылка на процедуру VBA
По мере углубления в язык VBA Ваш код будет усложняться и иметь более гибкую логику. Вам часто придется сталкиваться с тем, что некоторые части программы будут дублировать код частично или полностью. Таких ситуаций нужно избегать, так как они усложняют понимание процедур и затрудняют их отладку.
Для лучшего понимая рассмотрим пример (в примере используется псевдокод):
Начало_Процедуры Любой код Первая строка дублирующего кода Любой код Последняя строка дублирующего кода Любой код Первая строка дублирующего кода Любой код Последняя строка дублирующего кода Любой код Конец_Процедуру
Выносите дублирующие участки кода в отдельные процедуры и указывайте ссылки на них из главной процедуры:
Начало_Главной_Процедуры Любой код Ссылка на Процедуру_дублирующегося_кода Любой код Ссылка на Процедуру_дублирующегося_кода Любой код Конец_Главной_Процедуру Начало_Процедуры_дублирующегося_кода Любой код Конец_Процедуры_дублирующегося_кода
Для указания ссылки на процедуру используется оператор Call, который состоит из необязательного ключевого слова Call и имени вызываемой подпрограммы:
Call Макрос1 'Следующая строка идентична предыдущей Макрос1
Новые статьи:
-
Критерий Манна-Уитни
-
Подключение MySQL в Excel
-
Подключение Excel к SQL Server
Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.
Знакомство с редактором Visual Basic в Excel
Чтобы попасть в редактор кода, кликните на вкладке разработчика в области «Код» по кнопке «Visual Basic».
После этого на экране появится новое окно редактора VBA. Рассмотрим ниже некоторые его элементы, которые могут понадобиться в самом начале.
№1 на изображении. Кнопка сохранить. Сохраняет текущую книгу Excel. Необходимо быть внимательнее при работе с несколькими книгами, так как текущей считается та, которая выделена в окне проектов (№3 на изображении).
№2 на изображении. Кнопки запуска, остановки и прерывания выполнения кода. Во время запуска начинает выполняться код той процедуры, на которой размещен курсор. Данные кнопки дублируются вкладкой «Run» основного меню редактора.
№3 на изображении. Окно управления проектами VBA открытых книг (Project Explorer) и кнопка, отображающая это окно.
№4 на изображении. Кнопка, отображающая окно свойств объектов (Properties Window), выбранных в окне №3, и элементов пользовательских форм (работа с объектами, их свойствами и методами будет рассмотрена в отдельной статье этой категории).
№5 на изображении. Кнопка вызова окна объектов (Object Browser). В нем описаны все доступные для работы объекты, их свойства и методы.
Кнопки №3, №4 и №5 так же доступны на вкладке «View» главного меню редактора. Там же можно вызвать другие полезные для работы окна, которые не будут рассмотрены в этом материале.
О вызовах
Данные в утилите удается вбить, откорректировать, вывести и просмотреть через специальный interface. Для ПО нужен API. Он может быть вызван разными способами:
- система осуществляет вызов функции в пределах себя;
- происходит операция, которая вызывает метод другой системы;
- человек реализовывает задачу самостоятельно;
- манипуляцией занимаются автотесты.
Каждый вариант предусматривает передачу данных через тот или иной функционал. Далее каждый подход будет рассмотрен более внимательно.
Функция внутри утилиты
Части программы представляют собой элементы взаимодействующих друг с другом компонентов. Происходит это посредством программного уровня – на API.
Такой вариант является самым простым. Связано это с тем, что автором interface выступает разработчик. Он же – непосредственная целевая аудитория и потребитель. С неактуальной документацией и устаревшими данными такой пользователь не столкнется.
Для того, чтобы свести к минимуму заминки приема, нужно внимательно изучать комментарии, которые содержит код. Они укажут на принципы функционирования API.
Из другой системы
В пределах одного устройства всегда происходит взаимодействие приложений друг с другом на аппаратном уровне. Вызов interface из другой системы – распространенный прием, который тестируется в интеграторах.
Здесь система будет через API извлекать данные из другого программного обеспечения. Можно как получать информацию, так и передавать ее.
Выглядит это так:
- пользователь вводит букву на сайте;
- страница отправляет запрос в подсказки по API;
- соответствующие «указатели» возвращают ответ;
- сайт обрабатывает полученный контент и выводит результат клиенту.
Так будет с каждым отдельным символом. Стоит учесть, что «подсказки» в приведенном примере представлены отдельным документом (системой).
Вызов человеком
Причины, по которым применяется данная метода, могут быть разными:
- ускорение работы;
- необходимость делать исправления и корректировки багов;
- проверка логики без фронтовых докруток.
Обычно при наличии рассматриваемой «архитектуры» проще воспользоваться ей, чем GUI. Если обнаружен баг, нужно просто убрать из кода все лишнее, вызвать метод без graphic interface, а затем протестировать логику утилиты.
Автотестинг в помощь
Вот типичная пирамида автоматизации:
- GUI-тестинг – направлен на проверку непосредственными пользователями;
- API-тест – планомерное опускание вниз с уборкой «всего лишнего»;
- Unit-тестинг – проверки на отдельные функции, возможности.
В первом случае робот будет делать то, что реализовывал бы обычный пользователь. Пример – открывает браузер, нажимает на кнопки. Но, если подобная проверка провалилась, придется долго искать, в каком именно месте.
Второй вариант – те же самые манипуляции, но без браузера. Берутся данные на вход, проверяются на выходе. Пример – тестинг грамотности и правильности заполнения данных в Excel.
Юнит-тестирование позволяет посмотреть, как работает каждая функция отдельно друг от друга. С их помощью обнаруженные баги легко подкорректировать, потому что становится ясно, что именно и в каком месте «отказало».
Косвенный вызов
Предыдущие варианты – это прямое обращение к адресам и информации. Вызвать API-интерфейс удается косвенно. Пример – через GIU. Здесь происходит следующее:
- Клиент открывает систему и пытается загрузить отчет.
- Соответствующая проблема решается путем клика на определенную кнопку.
- Когда юзер кликает по соответствующему элементу управления, происходит формирование и отправка запроса на сервер.
- Сервер получат команду, обрабатывает ее.
- Происходит формирование отчета (ответа) с его непосредственной выдачей в качестве результата.
Так клиент может пользоваться разработками API, даже не подозревая об этом.
Что такое API
API (англ. Application Programming Interface — программный интерфейс приложения) — это набор способов и правил, по которым различные программы общаются между собой и обмениваются данными.
Все эти взаимодействия происходят с помощью функций, классов, методов, структур, а иногда констант одной программы, к которой обращаются другие. Это основной принцип работы API.
Допустим, вы покупаете билет в кино с помощью банковской карты. Во время покупки терминал обращается к API банка, который выпустил вашу карту, и отправляет запрос на оплату. А если вы заказываете такси через приложение, оно обращается к платёжной системе тоже через API.
Так терминал отправляет запрос в банк, чтобы человек купил билет в киноИллюстрация: Катя Павловская для Skillbox Media
Программный интерфейс похож на договор между клиентом и продавцом. Только клиентом выступает приложение, которому нужны данные, а продавцом — сервер или ресурс, с которого мы эти данные берём. В таком договоре прописываются условия того, как и какие данные может получить клиент.
API встречается практически везде:
- В языках программирования он помогает функциям корректно общаться друг с другом. Вызывающая функция должна соблюдать тип данных и последовательность параметров вызываемой функции.
- В операционной системе он помогает программам получать данные из памяти или менять настройки ОС. Поэтому, чтобы разрабатывать приложения под конкретную операционную систему, нужно знать её API.
- В вебе сервисы общаются друг с другом через программный интерфейс. Если API открытый, то официальную документацию по работе с ним публикуют создатели сервиса-источника. Так, например, выглядит документация Telegram.