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

Решение

Чтобы справиться с этой ситуацией, я написал макрос / надстройку Outlook, которая автоматически находит лучший слот в течение заранее определенного периода времени. «Лучший слот» определяется как слот, в котором большинство участников хотя бы ориентировочно доступно.

Почему функции «Автовыбор» недостаточно

В Microsoft Outlook уже есть функция автоматического выбора слота для всех необходимых участников:

Это отличный функционал для поиска слота, в котором все участники полностью «свободны»/«доступны». В действительности, однако, люди почти никогда не бывают полностью доступны, особенно. выше в организации, если только вы не запланировали встречу за 4 месяца. По этой причине я создал альтернативную версию, которая ищет слот, в котором требуемые участники должны быть доступны хотя бы «предварительно». Таким образом, будет предложен слот, подобный этому:

Монтаж

В Outlook откройте редактор кода, нажав Alt+F11, вставьте код здесь, перейдите к помощнику по планированию, щелкните правой кнопкой мыши ленту и выберите Настроить ленту.

выберите макросы:

и добавьте макрос в пользовательскую «папку макросов» на ленте:

Вы можете переименовать свой макрос и отобразить значок по желанию с помощью параметра «переименовать» в этом меню:

Поиск слотов появится рядом с обычным:

Код

Outlook предоставляет информацию календаря участников с помощью метода FreeBusy. Этот метод возвращает доступность предоставленного участника в течение следующих 4 недель в виде строки символов. Каждый символ представляет собой слот с заданным количеством минут.

Логическая структура

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

Структура цикла высокого уровня — со ссылкой на номер строки

Прокрутите вниз, чтобы просмотреть код с номерами строк.

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

Строка 43 запускает цикл для оценки всех слотов (которые были получены в строках 22–33).

Строка 45 перебирает всех участников, чтобы проверить, доступен ли участник (строка 47).

Если все требуемые участники доступны (строка 51), то выполняется проверка, является ли слот рабочим днем ​​и рабочим часом (строка 54), если да, то пользователь уведомляется о том, что подходящий слот найден (строка 58).

Подробнее

Объект собрания установлен в строке 5, поэтому участников собрания можно получить в строке 6.

Строки 22–33 извлекают информацию FreeBusy для получателей и сохраняют эту информацию в массиве. Информация FreeBusy предоставляется в виде строки символов. Каждый символ (число) отражает доступность данного получателя:

При циклическом просмотре списка получателей строка символов, содержащая информацию о доступности, добавляется в массив:

Строки 36–41 предлагают пользователю запросить период времени, в течение которого необходимо найти лучший слот (от 1 до 4 недель).

В строке 43 инициируется цикл, который проходит через все слоты, соответствующие предварительно определенному временному окну. Переменная «i» представляет собой слот (например, 30 минут). «i» также представляет позицию символа в строке (строках) доступности.

Дельта — это количество слотов, начиная с полуночи того дня, когда изначально было назначено это совещание. Это необходимо, поскольку дата начала для FreeBusy имеет детализацию на уровне дня.

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

Строка 45 является ядром кода, потому что эта строка проверяет, является ли пользователь либо 0 (доступен), либо ИЛИ 1 (у пользователя запланирована предварительная встреча). Последний вариант (1) отличается от обычного варианта поиска свободных слотов в Outlook.

Заключение

Вероятно, в этом коде можно многое улучшить. Я могу поделиться тем, что это здорово сэкономило мне время, и я надеюсь, что это поможет и другим людям. Свободное чувство, чтобы обеспечить обратную связь, большое спасибо!