VBA.Outlook: Как передеать объект процедуре? #311796


#0 by Звездочёт
Sub Test1    Dim MAPI As NameSpace    Dim oFolder As MAPIFolder    Set MAPI = GetNamespace("MAPI")    Set oFolder = MAPI.GetDefaultFolder(olFolderInbox)    Test2 (oFolder) ' <- Ошибка! Передается строка, вместо объекта End Sub Sub Test2(oFolder)    For i = 0 To oFolder.Items.Count        ' ...    Next End Sub
#1 by 774816
Set oFolder = MAPI.GetDefaultFolder(olFolderInbox) MsgBox TypeName(oFolder)   Exit sub Test2 (oFolder) ' <- Ошибка! Передается строка, вместо объекта проверь тип переменной
#2 by Звездочёт
я отладчиком прошел. в строке: Set oFolder = MAPI.GetDefaultFolder(olFolderInbox) получаем объект. А в функцию передается строка. Если объявить процедуру так: Sub Test2(oFolder As MAPIFolder)    ' ... End Sub То при вызове пишет, что нужен объект. Вывод: в функцию передается строка, хотя объект есть. Т.е. происходит неявное преобразование типов. А как можно передать объект?
#3 by 774816
введи в процу весь код без передачи Dim MAPI As NameSpace   Dim oFolder As MAPIFolder   Set MAPI = GetNamespace("MAPI")   Set oFolder = MAPI.GetDefaultFolder(olFolderInbox) For i = 0 To oFolder.Items.Count       ' ...   Next
#4 by 774816
или присовий как объект, а MAPI.GetDefaultFolder(olFolderInbox) точно возвращает объект? Sub Test1   Dim MAPI As NameSpace   Dim oFolder As Object   Set MAPI = GetNamespace("MAPI")   Set oFolder = MAPI.GetDefaultFolder(olFolderInbox)   Test2 (oFolder) End Sub Sub Test2(oFolder As Object)   For i = 0 To oFolder.Items.Count       ' ...   Next End Sub End Sub
#5 by Звездочёт
MAPI.GetDefaultFolder(olFolderInbox) точно возвращает объект, т.к. я могу просмотреть его свойства отладчиком и использовать их в коде. Более того, это объект - это папка Входящая. А строка передается "Входящая". предложение не подходит, т.к. теряется смысл процедур, в смысле повторного использования кода.
#6 by 774816
это для проверки объект было предложение, ну если функция  MAPI.GetDefaultFolder возвращает объект  то почему бы не попробовать так Test2(MAPI.GetDefaultFolder(olFolderInbox)), и если проблемма в передачи объекта то выволиться ошибка типа TYPE MISSMACH не соостветсвия типов, я к сожалению не знаком с объектами аутлук и сужу по коду а не по обектномой модели аутлук
#7 by Звездочёт
ясно. Этот код: Test2(MAPI.GetDefaultFolder(olFolderInbox)) то же самое, что и было. Я пробую разные варианты, но пока ошибку не могу обойти.
#8 by smaharbA
ByRef
#9 by Звездочёт
тоже была мысль, но: 1) Если написать так: Sub Test2(ByRef oFolder) то тоже не работает (передается строка) 2) В справке написано, что ByRef используется по умолчанию.
#10 by Звездочёт
там есть процедура: Sub GetFolderInfo(fldFolder As Outlook.MAPIFolder) значит вопрос в том, как вызвать процедуру.
#11 by Звездочёт
Урааа!!! Сам догадался ;) Вызывать надо так: Test2 oFolder ' <- !!!!!! :)
#12 by smaharbA
а надо ByVal ))
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С