Как установить событие для свойства пользовательской формы в Outlook VBA - PullRequest
0 голосов
/ 20 января 2019

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

Я хочу добиться этого, установив событие изменения в первом выпадающем списке.

Однако я не могу заставить это работать.

Кто-нибудь знает, где я запутался?Или если есть лучшая альтернатива?Заранее спасибо.

Я пробовал два метода:

1.CustomPropertyChange Обработчик событий в ThisOutlookSession Согласно этому руководству Я применил обработчик событий CustomPropertyChange:

Private WithEvents objInspectors As Outlook.Inspectors
Private WithEvents objAppointment As Outlook.AppointmentItem
Private Sub Application_Startup()
    Set objInspectors = Application.Inspectors
End Sub
Private Sub objInspectors_NewInspector(ByVal Inspector As Inspector)
    If Inspector.CurrentItem.Class = olAppointment Then
       Set objAppointment = Inspector.CurrentItem
    End If
End Sub
Private Sub objAppointment_Open(Cancel As Boolean)
' This procedure triggers normally
    With objAppointment
          .Recipients.ResolveAll
          .GetInspector.SetCurrentFormPage "P.2"
    End With
End Sub
Private Sub objAppointment_CustomPropertyChange(ByVal myPropName)
' After adding this procedure, the error (see below) appears
    MsgBox myPropName
End Sub

Теперь, когда я запускаю Outlook, появляется следующая ошибка, которая указывает на строку «Private Sub Private Sub objAppointment_CustomPropertyChange »:

This returns the error “Compile error: Procedure declaration does not match description of event or procedure having the same name”. 

Событие objAppointment_Open, однако, работает и соответствует тому же руководству.

2.Настраиваемый сценарий формы Второй метод, который я попробовал, заключается в использовании настраиваемого сценария формы (элемент «Назначение»> вкладка «Разработчик»> «Дизайн этой формы»> «Просмотреть код»):

Sub Item_CustomPropertyChange(ByVal Name)
    MsgBox "The " & Name & " custom property changed."
End Sub

Нет ошибки, но нетокно сообщения либо.После некоторых исследований я обнаружил, что пользовательский скрипт формы по умолчанию отключен.Я включил его в соответствии с этим руководством .После этого до сих пор нет ответа.Кроме того, довольно странно, что когда я добавляю другой обработчик событий (например, Item_Open) в пользовательский скрипт, а затем закрываю и снова открываю редактор, я вижу следующее:

Sub Item_CustomPropertyChange(ByVal Name)
    MsgBox "The " & Name & " custom property changed."
End Sub ??@___??
___?_????????____??
___?_??????__??????????`_????????___

1 Ответ

0 голосов
/ 20 января 2019

Я нашел ответ, решив проблему в первом методе выше (обработчик события CustomPropertyChange в ThisOutlookSession). Объект AppointmentItem, полученный из Inspector.CurrentItem, доступен только для чтения ( source ). Я очень подозреваю, что это проблема, поскольку оказалось, что события Open и Read работали, а события Write и CustomPropertyChange - нет.

Я изменил свой код на:

Public WithEvents myItem As Outlook.AppointmentItem
Private Sub Application_ItemLoad(ByVal Item As Object)
    ' Confirm if it actually is an appointment:
    If Item.Class <> olAppointment Then
        Exit Sub
    End If

    ' Initiate event handlers
    Set myItem = Item
End Sub
Private Sub myItem_Open(Cancel As Boolean)
    Debug.Print "myItem_Open triggered"
End Sub
Private Sub myItem_CustomPropertyChange(ByVal Name As String)
    Select Case Name
        Case "cfProjectName" 'Field name of custom property
            Debug.Print "Case cfProjectName"
            ' Performing actions based on first combobox change here
        Case "cfCustomActivityName" 'Field name of custom property
            Debug.Print "Case cfCustomActivityName"
            ' Performing actions based on second combobox change here
        Case Else
    End Select
End Sub

Я до сих пор не знаю, в чем проблема со вторым методом (сценарий пользовательской формы). Однако этот метод уже не был предпочтительным, поскольку мне приходилось вносить изменения в реестр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...