Excel VBA - 通过Lync / Communicator API发送组消息

时间:2016-03-01 12:35:37

标签: vba excel-vba lync office-communicator excel

我正在尝试使用VBA从Excel通过Lync / Microsoft Communicator向多个用户发送群组消息。

以下代码适用于单个电子邮件地址/用户,但如果提供了两个电子邮件地址的单元格范围,则会提供" Method' CreateGroup'对象IMessengerAdvanced'失败"错误。任何建议都将不胜感激。

function VideoEventStats() {
    var directive = {
        restrict: "A",
        replace: false,
        scope: {
            videoEventStats: "="
        },
        controller: controllerFunction,
        controllerAs: "vm",
        bindToController: true
    };

    controllerFunction.$inject = ["$element"];

    function controllerFunction($element) {
        var vm = this;

        vm.Play = Play;

        if($element.context.tagName === "VIDEO") {

            angular.element($element).on('play', vm.Play);

            $element.context.onended = function() {
                console.log('ended..');
            };
        }
        else {
            console.warn('This element is not a video element');
        }

        function Play() {
            vm.videoEventStats.CurrentUserHasSeen = true;
        }
    }

    return directive;
}

根据下面的上一个主题,InstantMessage(Object)方法可能适用于> 1用户,但实际上它似乎并不......

Lync notification of offline people using VBA

1 个答案:

答案 0 :(得分:1)

发送到群组时,界面需要数组的电子邮件地址。

而不是:

Sub sendIM()
 Dim msgr As CommunicatorAPI.IMessengerConversationWndAdvanced
 Dim msgTo As Variant
 msgTo = Sheets("Sheet1").Range("A1:A2").Value
 msgr = Messenger.InstantMessage(msgTo)
 msgr.SendText ("Test")
End Sub

测试一下:

Sub sendIM()
 Dim msgr As CommunicatorAPI.IMessengerConversationWndAdvanced

 Dim msgTo() As Variant
 ReDim msgTo(0 To 0)                       'Allocate first element
 For Each cell In Sheets("Sheet1").Range("A1:A2")'put your range here
     msgTo(UBound(msgTo)) = cell.Value2          'Assign the array element
     ReDim Preserve msgTo(UBound(msgTo) + 1) 'Allocate next element
 Next
 ReDim Preserve msgTo(LBound(msgTo) To UBound(msgTo) - 1)  'Deallocate the last, unused element

 'sometimes you need to use Set, sometimes you dont, depending on environment you have, or maybe OPTION EXPLICIT
 Set msgr = Messenger.InstantMessage(msgTo)
 'msgr = Messenger.InstantMessage(msgTo)
 msgr.SendText ("Test")
End Sub