Блокировать запись в календаре с указанными c категориями - PullRequest
1 голос
/ 07 января 2020

У меня есть пункт «Встреча / Встреча», и я делаю эту форму доступной с установленной категорией. Я хотел бы сейчас иметь возможность решить, какую из них я вхожу в свой календарь или нет.

Я новичок в VBA и у меня есть код, чтобы найти мои конкретные c категории, и это работает.

' Outputs all elements without set category
Sub SearchCategoryRestriction()
 Dim myFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim Filter As String
 Dim myNamespace As Namespace

 'This will return all items that have the set category.
 Filter = "[Categories] = 'myKeyword'"
 Set myNamespace = GetNamespace("MAPI")
 Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
 Set myItems = myFolder.Items.Restrict(Filter)
 Debug.Print myItems.Count

End Sub

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

Редактировать : Может быть, я нашел умное решение для моей проблемы здесь https://support.office.com/en-us/article/Show-a-declined-meeting-on-my-calendar-24E81B9B-3906-4C02-8B63-F97B02161763 Если я удалю все статьи дохода с моими установленными категориями, я надеюсь, что они не будут добавлены в мой календарь. Затем я запускаю скрипт поиска, чтобы найти его в списке удаляемых объектов и показать его пользователю.

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Теперь я застрял здесь

Sub SearchCategoryRestriction()
 Dim myFolder As Outlook.Folder
 Dim myItems As Outlook.AppointmentItem
 Dim Filter As String
 Dim myNamespace As Namespace

 'This will return all items that have the set category.
 Filter = "[Categories] = 'myKeyword'"
 Set myNamespace = GetNamespace("MAPI")
 Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
 Set myItems = myFolder.Items.Restrict(Filter)
 myItems.Move (olFolderDeletedItems)

End Sub

я меняю myItem как элемент на назначение

из этого * Dim myItems As Outlook.Items на этот Dim myItems As Outlook.AppointmentItem *

и становится ошибкой типа

0 голосов
/ 07 января 2020

Прежде всего, я бы предложил использовать функцию Instr вместо сравнения строк. Строка Categories может содержать другие маркеры, а не только один.

Не ясно, какой код используется для поиска элементов с заданными категориями c, скорее всего, вы просто перебираете все элементы в папке что не хорошо. Вместо этого вам нужно использовать Find / FindNext или Restrict методы Items, чтобы получить только предметы, которые соответствуют вашим условиям. Например:

Sub MoveItems()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myFolder As Outlook.Folder  
    Dim myItems As Outlook.Items  
    Dim myRestrictItems As Outlook.Items  
    Dim myItem As Outlook.MailItem  

    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myFolder = _  
        myNamespace.GetDefaultFolder(olFolderInbox)  
    Set myItems = myFolder.Items  
    Set myRestrictItems = myItems.Restrict("[Categories] = 'testword'")  
    ' do whatever you need with items found, for example, move to a subfolder
    For i =  myRestrictItems.Count To 1 Step -1  
        myRestrictItems(i).Move myFolder.Folders("Business")  
    Next  
End Sub

Поле Categories имеет ключевые слова типа, предназначенные для хранения нескольких значений. При программном доступе к нему поле Categories ведет себя как поле Text, и строка должна точно соответствовать. Значения в текстовой строке разделяются запятой и пробелом. Обычно это означает, что вы не можете использовать методы Find и Restrict в поле ключевых слов, если оно содержит более одного значения. Например, если у вас есть один контакт в категории «Бизнес» и один контакт в категориях «Бизнес» и «Социальная сеть», вы не можете легко использовать методы Find и Restrict для извлечения всех элементов, которые находятся в категории «Бизнес». Вместо этого вы можете l oop через все контакты в папке и использовать функцию Instr, чтобы проверить, содержится ли строка "Business" во всем поле ключевых слов.

Возможное исключение - если вы ограничите поле Categories до двух или небольшое количество значений. Затем вы можете использовать методы Find и Restrict с логическим оператором ИЛИ для извлечения всех элементов. Например (в псевдокоде): «Бизнес» ИЛИ «Бизнес, Личный» ИЛИ «Личный, Бизнес».

Обратите внимание на то, что строки Category не чувствительны к регистру.

Подробнее об этих методах читайте в следующих статьях:

Также вам может пригодиться метод AdvancedSearch . Основные преимущества использования метода AdvancedSearch в Outlook:

  • Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, поскольку метод AdvancedSearch запускает его автоматически в фоновом режиме.
  • Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и т. Д. c. в любом месте, то есть за пределами определенной папки. Методы Restrict и Find / FindNext могут быть применены к определенной коллекции Items (см. Свойство Items класса Folder в Outlook).
  • Полная поддержка запросов DASL ( Пользовательские свойства могут быть использованы для поиска тоже). Подробнее об этом можно прочитать в статье Filtering в MSDN. Для повышения эффективности поиска можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство IsInstantSearchEnabled класса Store).
  • Вы можете остановить процесс поиска в любой момент. используя метод Stop класса Search.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...