Как найти путь к папке с подписанным интернет-календарем в Excel VBA с помощью пространства имен Outlook Object? - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь получить свой код для перечисления событий подписанного интернет-календаря из gmail. В настоящее время код выполняет свою работу, но перечисляет только события, созданные в приложении outlook в папке Calender.

Вот текущий код, который я нашел в переполнении стека:

Option Explicit

Sub ListAppointments()
  Dim olApp As Object
  Dim olNS As Object
  Dim olFolder As Object
  Dim olApt As Object
  Dim NextRow As Long
  Dim FromDate As Date
  Dim ToDate As Date

FromDate = CDate("08/25/2018")
ToDate = CDate("12/31/2019")

On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then Set olApp = CreateObject("Outlook.Application")
On Error GoTo 0

Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.GetDefaultFolder(9) 'olFolderCalendar 9
NextRow = 2


With Sheets("Sheet1") 'Change the name of the sheet here
    .Range("A1:D1").Value = Array("Project", "Date", "Time spent", "Location")
    For Each olApt In olFolder.Items
        If (olApt.Start >= FromDate And olApt.Start <= ToDate) Then
            .Cells(NextRow, "A").Value = olApt.Subject
            .Cells(NextRow, "B").Value = CDate(olApt.Start)
            .Cells(NextRow, "C").Value = olApt.End - olApt.Start
            .Cells(NextRow, "C").NumberFormat = "HH:MM:SS"
            .Cells(NextRow, "D").Value = olApt.Location
            .Cells(NextRow, "E").Value = olApt.Categories
            NextRow = NextRow + 1
        Else
        End If
    Next olApt
    .Columns.AutoFit
End With

Set olApt = Nothing
Set olFolder = Nothing
Set olNS = Nothing
Set olApp = Nothing

End Sub

Я почти уверен, что проблема заключается здесь:

Set olFolder = olNS.GetDefaultFolder(9) 'olFolderCalendar 9

Имя папки, к которой я хочу получить доступ, является основным, я пробовал использовать оба из них:

Set olFolder = olNS.GetDefaultFolder(9).Folders("basic").Items
  Set olFolder = olNS.GetDefaultFolder(9).Parent.Folders("basic").Items

И ничего из этого не сработало. Ошибка во время выполнения «-2147221233 (8004010f)»: попытка не выполнена. Объект не может быть найден. Вот основная папка, из которой я хочу получить события.

EDIT: Итак, вот что я в конечном итоге нашел: olNS.GetDefaultFolder (9) .Parent = email@gmail.com и его дочерний элемент - один из моих календарей «Календарь», показанный на картинке. Родитель «основного» календаря - интернет-календари. Как я могу установить olFolder в каталог '\ Internet Calendars \ basic' вместо '\ email@gmail.com \ Calendar'

Спасибо

1 Ответ

0 голосов
/ 08 марта 2019

Я понял, что это так же просто, как установить olFolder в родительскую папку и дочернюю папку,

Установить olFolder = olNS.Folders ("Интернет-календари"). Папки ("Calend")

...