Windows 7에서 Outlook 2007을 사용합니다. 최근에 iCloud를 설치했는데, Google 캘린더 동기화는 기본 캘린더 만 동기화한다는 것을 알게되었습니다. 궁금 사람은 간단한 VBA 매크로 좀 도와 수 있다면 그 것Outlook 2007 매크로를 iCloud 캘린더에서 기본 캘린더로 약속을 복사합니다.
- 빈 모든 약속의 기본 일정
- 복사
많은 기본 일정으로 iCloud에 일정의 모든 약속 감사! 이 답변에
Windows 7에서 Outlook 2007을 사용합니다. 최근에 iCloud를 설치했는데, Google 캘린더 동기화는 기본 캘린더 만 동기화한다는 것을 알게되었습니다. 궁금 사람은 간단한 VBA 매크로 좀 도와 수 있다면 그 것Outlook 2007 매크로를 iCloud 캘린더에서 기본 캘린더로 약속을 복사합니다.
많은 기본 일정으로 iCloud에 일정의 모든 약속 감사! 이 답변에
건강 경고
모든 것이 실험에 의해 발견되었다. VB 도움말에서 시작하여 개체 모델에 액세스하기 위해 F2를 사용하고 효과가있을 때까지 실험했습니다. 나는 매우 추천 된 참고서를 사들 였지만 발견하지 못했던 것과 내가 발견 한 것을 많이 생략 한 것은 아무 것도 중요하지 않았다.
내가 얻은 지식의 핵심 기능은 다양한 설치를 기반으로한다는 것입니다. 마주 치게되는 문제 중 일부는 설치 실수로 인해 참조 서적 작성자가 그 이유를 알 수 없었던 이유를 설명합니다.
아래 아웃룩 2003에서 테스트 된 코드는 내가 즉시 창으로 Outlook과 기본 일정에서 약속의 2007 년출력 선택 속성을 유사한 코드를 테스트 한
당신은보고 그 첫 번째 버전 이 루틴의 오류 : "런타임 오류 '-2147467259 (80004005)': 긍정적 인 기간을 입력해야합니다."
Google에서 발견 한 웹 사이트에 따르면 오류 80004005는 시스템 파일이 손상되었음을 의미합니다.
약속에는 Start (날짜 입력), End (유형 날짜) 및 Duration (긴 형식)의 세 가지 관련 항목이 있습니다. End 또는 Duration은 런타임에 파생됩니다. 내 생각에 Duration은 음수이거나 End는 Start보다 앞에 있습니다. 내 시스템에서이 매크로로 만든 약속 목록에서 하루 종일 이벤트의 속성이 AllDayEvent = False
임을 알 수 있습니다. 약속을 작성한 후 나중에 AllDayEvent를 켜거나 끄면 불일치가 발생한다는 사실을 기억합니다.
이 문제점을 감지하려고 시도했지만 시스템에서이 오류가 발생하는 약속이 없기 때문에 테스트 할 수없는 코드를 추가했습니다. 이 매크로는 현재 약속 목록으로 시작할 수 있도록 만들어 졌으므로 작업을 수행 할 수 없다면 걱정하지 마십시오.
Sub ReviewCalendar()
Dim DateTimeEnd As Date
Dim DateTimeStart As Date
Dim Duration As Long
Dim ItemMine As Object
Dim ItemMineClass As Long
Dim FolderTgt As MAPIFolder
Set FolderTgt = CreateObject("Outlook.Application"). _
GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar)
' I use this macro to list selected properties from the test calendar.
' Add a quote to the statement above and remove the quote from the next
' statement to do the same.
'Set FolderTgt = CreateObject("Outlook.Application"). _
GetNamespace("MAPI").Folders("Test Folders"). _
Folders("Calendar")
For Each ItemMine In FolderTgt.Items
With ItemMine
' Occasionally I get syncronisation
' errors. This code avoids them.
ItemMineClass = 0
On Error Resume Next
ItemMineClass = .Class
On Error GoTo 0
If ItemMineClass = olAppointment Then
Debug.Print "** Subject: " & .Subject
Debug.Print " Created: " & _
Format(.CreationTime, "d mmm yy hh:mm:ss")
Debug.Print " Updated: " & _
Format(.LastModificationTime, "d mmm yy hh:mm:ss")
Debug.Print " Time: ";
DateTimeStart = .Start
If .AllDayEvent Then
Debug.Print "All day " & Format(.Start, "d mmm yy")
Else
On Error Resume Next
DateTimeEnd = .End
Duration = .Duration
On Error GoTo 0
If Duration <= 0 Then
Debug.Print " ##### Invalid duration #####"
End If
Debug.Print Format(.Start, "h:mm") & " to " & _
Format(.End, "h:mm") & "(" & .Duration & _
" minutes) on " & Format(.Start, "d mmm yy")
End If
' If you remove the quote from the following statement
' it will delete the appointment.
' .Delete ' Delete appointment
End If
End With
Next
End Sub
약속
의 복사를 테스트하기 위해 준비 당신이 중요한 아무것도 초래하지 않고 매크로를 테스트 할 수 있도록 테스트 폴더를 만들 좋습니다.
이제 캘린더를 선택하면 "테스트 폴더에서 캘린더"가 추가 선택 항목으로 제공됩니다. 기본 일정에서
복사 약속 일정
이 매크로는 기본 달력에있는 모든 약속의 시험 일정의 복사본을 생성 테스트합니다.
한번 실행 한 다음 Calandar를 선택하고 기본 달력과 테스트 달력을 모두 선택하십시오. 두 개의 캘린더는 동일해야합니다.
경고 : 매크로를 다시 실행하면 각 약속에 대해 두 개의 복사본이 종료됩니다.
Sub CopyCalendar()
Dim FolderDest As MAPIFolder
Dim ItemCopy As AppointmentItem
Dim ItemMine As Object
Dim ItemMineClass As Long
Dim NameSpaceMine As NameSpace
Dim FolderSrc As MAPIFolder
Set NameSpaceMine = _
CreateObject("Outlook.Application").GetNamespace("MAPI")
With NameSpaceMine
Set FolderSrc = .GetDefaultFolder(olFolderCalendar)
Set FolderDest = .Folders("Test Folders").Folders("Calendar")
End With
Debug.Print FolderSrc.Items.Count
Debug.Print FolderDest.Items.Count
For Each ItemMine In FolderSrc.Items
With ItemMine
' Occasionally I get syncronisation
' errors. This code avoids them.
ItemMineClass = 0
On Error Resume Next
ItemMineClass = .Class
On Error GoTo 0
' I have never found anything but appointments in
' Calendar but test just in case
If ItemMineClass = olAppointment Then
Set ItemCopy = .Copy
ItemCopy.Move FolderDest
End If
End With
Next
End Sub
다음은 Set FolderDest
문은 계층 구조를 아래로 작업하여 partcular 폴더를 선택하는 방법을 보여줍니다
단계를 반복합니다. 다른 일반적인 기술이 있지만 이러한 방식으로 iClound 캘린더에 액세스 할 수 있으면 사용자 요구 사항에 충분해야합니다.
Set NameSpaceMine = _
CreateObject("Outlook.Application").GetNamespace("MAPI")
With NameSpaceMine
Set FolderDest = .Folders("Test Folders").Folders("Calendar")
End With
첫번째 매크로 일정마다 약속하고 다른 한 캘린더의 제 약속 사본을 삭제하기위한 코드를 포함한다.
이 코드를 결합하여 적용하면 단방향 동기화가 가능합니다. 즉, Calendar 2를 Calendar 1의 사본으로 만듭니다. 적절한가? iCloud Calendar를 기본 달력으로 덮어 쓰는 것이 적절합니까? 양방향 동기화는 더욱 복잡합니다. 필자는 여러 "엔터프라이즈"동기화 루틴을 경험했지만 아무도 바보가 아닙니다. 만약 당신이 "가격이 비싸고 품질이 떨어지는 소프트웨어"라는 학교에서라면, 놀라지 않을 것입니다. 그렇지 않으면 양방향 동기화가 어렵거나 두 진술이 모두 사실임에 동의 할 수 있습니다.
이슈는 다음과 같습니다 하나 달력
내 시스템에서는 CreationTime과 LastModificationTime이 변경되지 않은 채로 복사되므로 식별자로 사용할 수 있습니다. 모임 요청으로 인해 업데이트되는 일정의 CreationTime 및 LastModificationTime에 대한 영향을 테스트 할 수있는 방법이 없습니다.
나는이 문제를 고려하고 앞으로 어떻게 할 것인지 결정할 것입니다.
대단히 감사합니다. Outlook에 매크로를 추가 할 수 있습니다. 나는 VBA를 Excel에서 간단히 다루었습니다. 사물을 통해 생각해 보면 매크로가 iCloud 캘린더를 기본 캘린더와 동기화하는 것이 가장 바람직합니다 (즉, 기본 캘린더에서 변경하고 매크로는 iCloud 캘린더와 변경 사항을 동기화합니다). iCloud 캘린더는 Outlook에서 액세스 할 수 있으며 "iCloud의 캘린더"라고합니다. 그러나 귀하의 매크로를 실행하면 오류 메시지가 나타납니다 : 런타임 오류 '-2147467259 (80004005)': 긍정적 인 기간을 입력해야합니다. –
내일 자정이되어서 내일 좀 더 코드를 살펴 보겠습니다. 기간을 읽지 않아 약속 시간이 잘못되었음을 의미합니다. 마지막 Debug.Print 문에서'.Duration &'을 삭제하고 그 줄 아래에'Debug.Print ""& .Duration'을 추가하십시오. 그러면 오류를 나타내는 약속의 날짜와 제목을 알 수 있습니다. 'Debug.Print ""& .Duration'이 에러를 내면, 줄을 주석으로 만들고, F8을 한 번 누르고, 다시 인용 부호를 제거한 다음 F5를 누릅니다. 그러면 해당 약속의 기간이 지나고 매크로가 계속 될 수 있습니다. –
이 오류를 제공하는 약속이나 약속에 특별한 것이 있습니까? 설치하는 동안 Outlook 탐색기는 최상위 폴더로 '개인 폴더'와 '보관 폴더'를 제공합니다. 이 아래에는받은 편지함과 같은 하위 폴더가 있습니다. 하위 폴더는 모든 하위 수준의 하위 하위 폴더를 가질 수 있습니다. 아래에 'iCloud의 캘린더'가있는 'iCloud'와 같은 이름의 최상위 폴더가 있다고 가정합니다. 그게 뭔가? –