Авторизация по протоколу OAuth в проектах .NET Framework – C#, Visual Basic .NET – Статьи по программированию (Алексей Немиро) – Kbyte.Ru

Введение

Крупные порталы и социальные сети могут предоставлять сторонним проектам ограниченный доступ к профилю и материалам своих пользователей. Безусловно, с разрешения последних. В большинстве своем это реализуется при помощи открытого протокола OAuth.

Протокол OAuth позволяет клиентским приложениям получать необходимые разрешения к информации идентифицируемого пользователя, или даже права на выполнение определенных действий от имени пользователя на сайте-сервере OAuth. Это может быть удобно, поскольку конечному пользователю не требуется регистрировать новые учетные записи на сайтах, а также пользователь может избавиться от необходимости вручную синхронизировать информацию между различными ресурсами.

Для .NET Framework существует множество библиотек, которые позволяют реализовать авторизацию по протоколу OAuth. В этой статье речь пойдет об одной из таких библиотек, которая называется Nemiro.OAuth.

Авторизация по протоколу oauth в проектах asp .net mvc


Процедура авторизации по протоколу OAuth в проектах ASP .NET MVC не сложнее, чем в проектах WebForms.

Первые два шага полностью идентичны.

3. Создайте в контроллере HomeController обработчик действия ExternalLogin, который будет перенаправлять пользователя на сервер авторизации.

C#:

Visual Basic .NET:

4. Добавьте в контроллер HomeController обработчик действия ExternalLoginResult.

C#:

Visual Basic .NET:

5. На странице разместите ссылки JavaScript, ведущие на действие ExternalLogin.

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

6. Пользуйтесь!

Авторизация по протоколу oauth в проектах asp .net webforms

Практическая реализация авторизации по протоколу OAuth в проектах ASP .NET WebForms займет всего пять простых шага!

1. Добавьте в проект файл Global.asax, если такового еще нет.

Авторизация по протоколу oauth в проектах windows forms


В проектах Windows Forms осуществить авторизацию по протоколу OAuth можно при помощи стандартного элемента WebBrowser.

1. В обработчике события главной формы, или при инициализации приложения, зарегистрируйте необходимые клиенты OAuth.

C#:

Visual Basic .NET:

2. Разместите на форме две кнопки и добавьте общий обработчик нажатия (btn_Click), который будет открывать окно авторизации. В свойстве Tag кнопок необходимо указать имя поставщика OAuth.

C#:

Visual Basic .NET:

3. Добавьте новую форму (далее frmLogin) и разместите на ней элемент WebBrowser.

4. Создайте для формы frmLogin конструктор, принимающий один строковой параметр. В этот параметр будет передаваться имя зарегистрированного в программе поставщика OAuth, по которому будет строиться адрес для авторизации.

C#:

Visual Basic .NET:

5. В обработчик события DocumentCompleted элемента WebBrowser поместите код, который будет искать и обрабатывать результаты авторизации.

C#:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  // ожидаем, когда появится адрес с результатами авторизации
  if (e.Url.Query.IndexOf("code=") != -1 || e.Url.Fragment.IndexOf("code=") != -1 || e.Url.Query.IndexOf("oauth_verifier=") != -1)
  {
    // проверяем адрес
    var result = OAuthWeb.VerifyAuthorization(e.Url.ToString());
    if (result.IsSuccessfully)
    {
      // показываем данные пользователя
      MessageBox.Show
      (
        String.Format
        (
          "User ID: {0}rnUsername: {1}rnDisplay Name: {2}rnE-Mail: {3}", 
          result.UserInfo.UserId,
          result.UserInfo.UserName,
          result.UserInfo.DisplayName ?? result.UserInfo.FullName,
          result.UserInfo.Email
        ), 
        "Successfully", 
        MessageBoxButtons.OK, 
        MessageBoxIcon.Information
      );
    }
    else
    {
      // ошибка
      MessageBox.Show(result.ErrorInfo.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    this.Close();
  }
}

Visual Basic .NET:

Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
  ' ожидаем, когда появится адрес с результатами авторизации
  If Not e.Url.Query.IndexOf("code=") = -1 OrElse Not e.Url.Fragment.IndexOf("code=") = -1 OrElse Not e.Url.Query.IndexOf("oauth_verifier=") = -1 Then
    ' проверяем адрес
    Dim result = OAuthWeb.VerifyAuthorization(e.Url.ToString())
    If result.IsSuccessfully Then
      ' показываем данные пользователя
      MessageBox.Show _
      (
        String.Format _
        (
          "User ID: {0}{4}Username: {1}{4}Display Name: {2}{4}E-Mail: {3}",
          result.UserInfo.UserId,
          result.UserInfo.UserName,
          If(Not String.IsNullOrEmpty(result.UserInfo.DisplayName), result.UserInfo.DisplayName, result.UserInfo.FullName),
          result.UserInfo.Email,
          vbNewLine
        ),
        "Successfully",
        MessageBoxButtons.OK,
        MessageBoxIcon.Information
      )
    Else
      ' ошибка
      MessageBox.Show(result.ErrorInfo.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End If
    Me.Close()
  End If
End Sub

6. Пользуйтесь!

Использование окон ввода данных

Окно ввода данных — это простое диалоговое окно, которое позволяет пользователю ввести одно значение. Например, можно применить окно ввода данных, чтобы предоставить пользователю возможность ввести текст, число или диапазон значений. Для создания окна ввода предназначены две функции InputBox: одна— в VBA, а вторая является методом объекта Application.

Как пользоваться библиотекой?


Использовать библиотеку очень просто. Для удобства, рекомендуется импортировать пространства имен Nemiro.OAuth и Nemiro.OAuth.Clients в проект.

C#:

Visual Basic .NET:


Пространство Nemiro.OAuth содержит основные классы, которые необходимы для работы с протоколами OAuth первой и второй версии.

В Nemiro.OAuth.Clients содержатся готовые реализации клиентов для популярных ресурсов.

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

Статичный класс OAuthManager позволяет регистрировать в приложении клиентов для различных серверов OAuth.

Маркер доступа


Маркер доступа, известный также как «access token» или просто «токен», необходим для работы с API сайтов, предоставляющих доступ к ресурсам своих пользователей по протоколу OAuth.

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

В библиотеке Nemiro.OAuth базовая информация о пользователе получается при помощи API. Вы можете взять за основу методику работы с API и применить её для воплощения своих потребностей.

Не рекомендуется реализовывать работу с API непосредственно в библиотеке. Библиотека классов Nemiro.OAuth предназначена исключительно для работы с протоколом OAuth. Если вы хотите реализовать работу с API, лучше сделайте новый, узкопрофильный, проект, который будет принимать от Nemiro.OAuth маркер доступа и использовать его для запросов к методам API.

Следует отметить, что для работы с API могут потребоваться особые разрешения. Вы можете легко запрашивать любые разрешения, указав их в свойстве Scope при регистрации классов-клиентов OAuth.

Например, чтобы получить доступ к базой информации о пользователе и списку друзей пользователя с сервера ВКонтакте, необходимо запросить разрешения: status и friends.

C#:

Visual Basic .NET:

Примечание: Если вы заметили, в примере также указано свойство Parameters. Это свойство содержит список параметров, которые будут переданы в адрес авторизации. В данном случае, будет передан параметр display=popup, что сообщит серверу ВКонтатке, что следует показывать модальное окно авторизации, а не стандартное.

Каждый поставщик OAuth имеет собственный набор прав. Информацию о доступных разрешениях вы можете найти в документации API на сайтах поставщиков OAuth.

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


Маркер доступа находится в результатах проверки авторизации пользователя, в свойстве AccessTokenValue. Разумеется, только если результат проверки был успешным (IsSuccessfully).

C#:

Visual Basic .NET:


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

C#:

private void GetVKontakteFriends(string accessToken)
{
  // параметры запроса
  var parameters = new NameValueCollection
  { 
    { "access_token", accessToken },
    { "count", "10" }, // только первые десять друзей
    { "fields", "nickname" }
  };

  // выполняем запрос к API
  var result = Nemiro.OAuth.Helpers.ExecuteRequest
  (
    "GET",
    "https://api.vk.com/method/friends.get",
    parameters,
    null
  );

  // выводим список друзей в окно консоли
  foreach (Dictionary<string, object> itm in (Array)result["response"])
  {
    string friendName = "";
    if (itm.ContainsKey("first_name") && itm.ContainsKey("last_name"))
    {
      friendName = String.Format("{0} {1}", itm["first_name"], itm["last_name"]);
    }
    else
    {
      friendName = itm["nickname"].ToString();
    }
    Console.WriteLine(friendName);
  }
}

Visual Basic .NET:

Public Sub GetVKontakteFriends(accessToken As String)
  ' параметры запроса
  Dim parameters As New NameValueCollection() From _
  {
    {"access_token", accessToken},
    {"count", "10"},
    {"fields", "nickname"}
  }

  ' выполняем запрос к API
  Dim result As RequestResult = Helpers.ExecuteRequest _
  (
    "GET",
    "https://api.vk.com/method/friends.get",
    parameters,
    Nothing
  )

  ' выводим список друзей в окно консоли
  For Each itm As Dictionary(Of String, Object) In CType(result("response"), Array)
    Dim friendName As String = ""
    If itm.ContainsKey("first_name") AndAlso itm.ContainsKey("last_name") Then
      friendName = String.Format("{0} {1}", itm("first_name"), itm("last_name"))
    Else
      friendName = itm("nickname").ToString()
    End If
    Console.WriteLine(friendName)
  Next
End Sub

Метод excel getopenfilename

Если приложению необходимо получить от пользователя имя файла, то можно воспользоваться функцией InputBox, но этот подход часто приводит к возникновению ошибок. Более надежным считается использование метода GetOpenFilename объекта Application, который позволяет удостовериться, что приложение получило корректное имя файла (а также его полный путь).

Данный метод позволяет отобразить стандартное диалоговое окно Открытие документа, но при этом указанный файл не открывается. Вместо этого метод возвращает строку, которая содержит путь и имя файла, выбранные пользователем. По окончании данного процесса с именем файла можно делать все что угодно. Синтаксис (все параметры необязательные):

Application.GetOpenFilename(фильтр_файла, индекс_фильтра, заголовок, множественный_выбор)

  • Фильтр_файла. Содержит строку, определяющую критерий фильтрации файлов (необязательный параметр).
  • Индекс_фильтра. Указывает индексный номер того критерия фильтрации файлов, который используется по умолчанию (необязательный параметр).
  • Заголовок. Содержит заголовок диалогового окна (необязательный параметр). Если этот параметр не указать, то будет использован заголовок Открытие документа.
  • Множественный_выбор. Необязательный параметр. Если он имеет значение ИСТИНА, можно выбрать несколько имен файлов. Имя каждого файла заносится в массив. По умолчанию данный параметр имеет значение ЛОЖЬ.

Аргумент Фильтр_файла определяет содержимое раскрывающегося списка Тип файлов, находящегося в окне Открытие документа. Аргумент состоит из строки, определяющей отображаемое значение, а также строки действительной спецификации типа файлов, в которой находятся групповые символы.

Оба элемента аргумента разделены запятыми. Если этот аргумент не указывать, то будет использовано значение, заданное по умолчанию: “Все файлы (*.*),*.*”. Первая часть строки Все файлы (*.*) – то текст, отображаемый в раскрывающемся списке тип файлов. Вторая часть строки *.* указывает тип отображаемых файлов.

В следующих инструкциях переменной Filt присваивается строковое значение. Эта строка впоследствии используется в качестве аргумента фильтр_файла метода GetOpenFilename. В данном случае диалоговое окно предоставит пользователю возможность выбрать один из четырех типов файлов (кроме варианта Все файлы).

В следующем примере у пользователя запрашивается имя файла. При этом в поле типа файлов используются пять фильтров (код содержится в файле prompt for file.xlsm).

На рис. 11 показано диалоговое окно, которое выводится на экран после выполнения этой процедуры (по умолчанию предлагается фильтр *.csv).

Рис. 11. Метод GetOpenFilename отображает диалоговое окно, в котором выбирается файл

В следующем примере пользователь может, удерживая нажатыми клавиши <Shift> и <Ctrl>, выбрать в окне несколько файлов. Обратите внимание, что событие использования кнопки Отмена определяется по наличию переменной массива FileName.

Обратите внимание: переменная FileName определена как массив переменного типа (а не как строка в предыдущем примере). Причина заключается в том, что потенциально FileName может содержать массив значений, а не только одну строку.

Метод excel getsaveasfilename

Данный метод отображает диалоговое окно Сохранение документа и дает пользователю возможность выбрать (или указать) имя сохраняемого файла. В результате возвращается имя файла, но никакие действия не предпринимаются. Синтаксис (все параметры необязательные):

Application.GetSaveAsFilename(начальное_имя, фильтр_файла, индекс_фильтра, заголовок, текст_кнопки)

  • Начальное_имя. Указывает предполагаемое имя файла.
  • Фильтр_файла. Содержит критерий фильтрации отображаемых в окне файлов.
  • Индекс_фильтра. Код критерия фильтрации файлов, который используется по умолчанию.
  • Заголовок. Определяет текст заголовка диалогового окна.

Метод excel inputbox

Метод Excel InputBox по сравнению с функцией VBA InputBox предоставляет три преимущества:

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

Метод InputBox имеет следующий синтаксис.

InputBox(запрос, [, заголовок], [, по_умолчанию], [, слева], [, сверху], [, справка, раздел], [, тип])

  • Запрос. Указывает текст, отображаемый в окне ввода (обязательный параметр).
  • Заголовок. Определяет заголовок окна ввода (необязательный параметр).
  • По_умолчанию. Задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр).
  • Слева, сверху. Определяют координаты верхнего левого угла окна ввода на экране (необязательные параметры).
  • Справка, раздел. Указывают файл и раздел в справочной системе (необязательные параметры).
  • Тип. Указывает код типа данных, который будет возвращаться методом (необязательный параметр; значения см. рис. 3).

Рис. 3. Коды типов данных, возвращаемые методом Excel InputBox

Используя сумму приведенных выше значений, можно возвратить несколько типов данных. Например, для отображения окна ввода, которое принимает текстовый или числовой тип данных, установите код равным 3 (1 2 или число текст).

В процедуре EraseRange используется метод InputBox. Пользователь может указать удаляемый диапазон (рис. 4). Адрес диапазона вводится в окно вручную, или выделяется мышью на листе. Метод InputBox с кодом 8 возвращает объект Range (обратите внимание на ключевое слово Set).

Рис. 4. Пример использования метода InputBox для выбора диапазона

Если в процедуре EraseRange ввести не диапазон адресов, то Excel отобразит сообщение (рис. 5) и позволит пользователю повторить ввод данных.

Рис. 5. Метод InputBox автоматически проверяет вводимые данные

Отображение диалоговых окон excel

Создаваемый вами код VBA может вызывать на выполнение многие команды Excel, находящиеся на ленте. И если в результате выполнения команды открывается диалоговое окно, ваш код может делать выбор в диалоговом окне (даже если само диалоговое окно не отображается).

Например, следующая инструкция VBA эквивалентна выбору команды Главная –> Редактирование –> Найти и выделить –> Перейти и указанию диапазона ячеек А1:СЗ с последующим щелчком на кнопке ОК.

Application.Goto Reference:=Range(“А1:СЗ”)

Иногда же приходится отображать встроенные окна Excel, чтобы пользователь мог сделать свой выбор. Для этого используется коллекция Dialogs объекта Application. Учтите, что в настоящее время компания Microsoft прекратила поддержу этого свойства. В предыдущих версиях Excel пользовательские меню и панели инструментов создавались с помощью объекта CommandBar.

В версиях Excel 2007 и Excel 2022 этот объект по-прежнему доступен, хотя и работает не так, как раньше. Начиная с версии Excel 2007 возможности объекта CommandBar были существенно расширены. В частности, объект CommandBar можно использовать для вызова команд ленты с помощью VBA.

Многие из команд, доступ к которым открывается с помощью ленты, отображают диалоговое окно. Например, следующая инструкция отображает диалоговое окно Вывод на экран скрытого листа (рис. 12; см. также файл ribbon control names.xlsm):

Отображение формы ввода данных

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

Подобная форма предназначена для работы как с обычным диапазоном, так и с диапазоном, оформленным в виде таблицы (с помощью команды Вставка –> Таблицы –> Таблица). Пример формы ввода данных показан на рис. 13 (см. также файл data form example.xlsm).

Рис. 13. Некоторые пользователи предпочитают применять встроенные формы ввода данных Excel для ввода сведений; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

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

  1. Щелкните правой кнопкой мыши на панели быстрого доступа и в контекстном меню выберите параметр Настройка панели быстрого доступа.
  2. На экране появится вкладка Панель быстрого доступа диалогового окна Параметры Excel.
  3. В раскрывающемся списке Выбрать команды из выберите параметр Команды не на ленте.
  4. В появившемся списке выберите параметр Форма.
  5. Щелкните на кнопке Добавить для добавления выбранной команды на панель быстрого доступа.
  6. Щелкните на кнопке ОК для закрытия диалогового окна Параметры Excel.

После выполнения перечисленных выше действий на панели быстрого доступа появится новый значок.

Для работы с формой ввода данных следует структурировать данные таким образом, чтобы Excel распознавал их в виде таблицы. Начните с указания заголовков столбцов в первой строке диапазона вводимых данных. Выделите любую ячейку в таблице и щелкните на кнопке Форма панели быстрого доступа.

Excel отображает диалоговое окно, в котором будут вводиться данные. Для перемещения между текстовыми полями в целях ввода информации используйте клавишу <Tab>. Если ячейка содержит формулу, результат вычислений отображается в виде текста (а не в формате поля ввода данных). Другими словами, невозможно изменить формулы с помощью формы ввода данных.

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

Используйте метод ShowDataForm для отображения формы ввода данных Excel. Единственное требование заключается в том, что активная ячейка должна находиться в диапазоне. Следующий код активизирует ячейку А1 (в таблице), а затем отображает форму ввода данных.

[1] По материалам книги Джон Уокенбах. Excel 2022. Профессиональное программирование на VBA. – М: Диалектика, 2022. – С. 387–403.

Подключение библиотеки к проекту


Наиболее простым способом подключения библиотеки Nemiro.OAuth к проекту является использование консоли диспетчера пакетов (Package Manager Console).

Чтобы открыть окно консоли диспетчера пакетов (не путать с обычной консолью), выберите меню Сервис (Service) -> Диспетчер пакетов библиотек (Library Package Manager) -> Консоль диспетчера пакетов ( Package Manager Console).

Рис. 1. Вызов окна консоли диспетчера пакетов в Visual Studio.
Рис. 1. Вызов окна консоли диспетчера пакетов в Visual Studio.

В появившемся окошке введите команду:

Рис. 2. Установка Nemiro.OAuth через консоль диспетчера покетов.
Рис. 2. Установка Nemiro.OAuth через консоль диспетчера покетов.

Если все прошло нормально, то в проект автоматически загрузится и подключится библиотека Nemiro.OAuth.

Получение имени папки

Для того чтобы получить имя файла, проще всего воспользоваться описанным выше методом GetOpenFileName. Но если нужно получить лишь имя папки (без названия файла), лучше воспользоваться методом объекта Excel FileDialog. Следующая процедура отображает диалоговое окно, в котором можно выбрать папку (см. также файл get directory.xlsm). С помощью функции MsgBox отображается имя выбранной папки (или сообщение Отменено).

Объект FileDialog позволяет определить начальную папку путем указания значения свойства InitialFileName. В примере в качестве начальной папки применяется путь к файлам Excel, заданный по умолчанию.

Послесловие

Реализация авторизации через внешние ресурсы является важной функцией, которая может существенно увеличить аудиторию вашего сайта или вашего приложения, повысить лояльность и активность пользователей.

Библиотека Nemiro.OAuth позволяет довольно просто реализовать авторизацию в проектах .NET Framework через любые серверы, поддерживающие работу по протоколу OAuth.Благодаря открытому исходному коду, можно дополнять или изменять функционал библиотеки. Если у вас есть учетная запись на сервер GitHub, вы можете просто скопировать себе проект.


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

Создание формы авторизации с помощью visual basic в microsoft access –

Добрый день!
Если необходимо от определенного пользователя скрыть кнопку или поле формы, как быть в такой ситуации? подскажете?

Функция inputbox в vba

Функция имеет следующий синтаксис:

InputBox(запрос [, заголовок] [, по_умолчанию] [, xpos] [, ypos] [, справка, раздел])

  • Запрос. Указывает текст, отображаемый в окне ввода (обязательный параметр).
  • Заголовок. Определяет заголовок окна ввода (необязательный параметр).
  • По_умолчанию. Задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр).
  • xpos, ypos. Определяют координаты верхнего левого угла окна ввода на экране (необязательные параметры).
  • Справка, раздел. Указывают файл и раздел в справочной системе (необязательные параметры).

Функция InputBox запрашивает у пользователя одно значение. Она всегда возвращает строку, поэтому результат нужно будет преобразовать в числовое значение. Текст, отображаемый в окне ввода, может достигать 1024 символов (длину допускается изменять в зависимости от ширины используемых символов). Если определить раздел справочной системы, то в диалоговом окне будет отображена кнопка Справка.

Процедура GetName запрашивает у пользователя полное имя (имя и фамилию). Затем программа выделяет имя и отображает приветствие в окне сообщения (см. рис. 1; код функции можно найти в файле VBA inputbox.xlsm).

Функция vba msgbox

Функция VBA MsgBox служит для отображения сообщения. Также она передает результат щелчка на кнопке ОК или Отмена). Синтаксис функции:

MsgBox(запрос[, кнопки][, заголовок][, справка, раздел])

  • Запрос. Определяет текст, который будет отображаться в окне сообщения (обязательный параметр).
  • Кнопки. Содержит числовое выражение (или константу), которое определяет кнопки, отображаемые в окне сообщения (необязательный параметр; рис. 6). Также можно задать кнопку по умолчанию.
  • Заголовок. Содержит заголовок окна сообщения (необязательный параметр).
  • Справка, раздел. Указывают файл и раздел справочной системы (необязательные параметры).

Рис. 6. Константы и значения, используемые для выбора кнопок в функции MsgBox

Первая группа значений (0–5) описывает номер и тип кнопок в диалоговом окне. Вторая группа (16, 32, 48, 64) описывает стиль значка. Третья группа (0, 256, 512) определяет, какая кнопка назначена по умолчанию. Четвертая группа (0, 4096) определяет модальность окна сообщения.

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

Можно использовать функцию MsgBox в качестве процедуры (для отображения сообщения), а также присвоить возвращаемое этой функцией значение переменной. Функция MsgBox возвращает результат, представляющий кнопку, на которой щелкнул пользователь. В следующем примере отображается сообщение и не возвращается результат (код функций, приведенных в этом разделе см. также в файле VBA msgbox.xlsm).

Чтобы получить результат из окна сообщения, присвойте возвращаемое функцией MsgBox значение переменной. В следующем коде используется ряд встроенных констант (рис. 7), которые упрощают управление возвращаемыми функцией MsgBox значениями.

Рис. 7. Константы, возвращаемые MsgBox

Функция MsgBox возвращает переменную, имеющую тип Integer. Вам необязательно использовать переменную для хранения результата выполнения функции MsgBox. Следующая процедура представляет собой вариацию процедуры GetAnswer.

В следующем примере функции используется комбинация констант для отображения окна сообщения с кнопками Да, Нет и знаком вопроса (рис. 8). Вторая кнопка (Нет) используется по умолчанию. Для простоты константы добавлены в переменную Config.

Рис. 8. Параметр Кнопки функции MsgBox определяет кнопки, которые отображаются в окне сообщения

В файле VBA msgbox.xlsm функция ContinueProcedure в демонстрационных целях представлена в виде процедуры. Функция ContinueProcedure может вызываться из другой процедуры. Например, оператор

If Not ContinueProcedure() Then Exit Sub

вызывает функцию ContinueProcedure (которая отображает окно сообщения). Если функция возвращает значение ЛОЖЬ (т.е. пользователь щелкнул на кнопке Нет), то процедура будет завершена. В противном случае выполняется следующий оператор.

Если в сообщении необходимо указать разрыв строки (рис. 9), воспользуйтесь константой vbCrLf (или vbNewLine):

Рис. 9. Разбиение сообщения на несколько строк

Для включения в сообщение символа табуляции применяется константа vbTab. В процедуре ShowRange окно сообщения используется для отображения диапазона значений размером 10 строк на 3 столбца — ячейки А1:С10 (рис. 10). В этом случае столбцы разделены с помощью константы vbTab.

Рис. 10. Текст в этом окне сообщения содержит символы табуляции и разрыва строк

Похожее:  Личный кабинет клиента ПАО «Мосэнергосбыт» - Вход в личный кабинет

Добавить комментарий

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