2016-10-17 2 views
2

파워 포인트 프리젠 테이션이 열릴 때 OS X 응용 프로그램을 열어야합니다. 파워 포인트가 열리면 VBA 콜백을 다시받습니다 (Auto_Open()). 그러나 각 프리젠 테이션을 열어 볼 때마다 전화가 필요합니다.프레젠테이션이 열릴 때 PowerPoint에서 전화를 다시받을 수있는 방법이 있습니까? (파워 포인트 2016-Mac 버전)

우리는 각 프레젠테이션을 별도의 파워 포인트 앱 (차이 인스턴스)에서 열 수 있습니다. Mac에서는 Powerpoint 응용 프로그램이 한 번 열리고 모든 프레젠테이션이 동일한 Powerpoint 응용 프로그램 (Powerpoint 2016-Mac 버전)에서 열립니다.

각 프레젠테이션 파일을 열 때마다 코코아 애플리케이션에서 코드 스 니펫을 실행해야 할 때 다시 전화를해야합니다.

+0

'fswatch' ('homebrew '와 함께 설치)를 사용하면 PDF 파일의 파일 열기에 대한 사용자 폴더를 재귀 적으로 볼 수 있습니다. 또는'sudo opensnoop -n PowerPoint' 또는 somesuch와 함께 할 수도 있습니다. –

+0

"Windows에서는 각 프레젠테이션을 별도의 파워 포인트 앱 (차이 인스턴스)에서 열 수 있습니다."실제로는 아니요. 최근 버전을 사용하면 개별 창에서 여러 파일을 열 수 있지만 앱 인스턴스는 하나뿐입니다. 앱이 Presentations.Count 속성에 대해 PPT를 주기적으로 질의 할 수 있으며, 점검 할 열려있는 각 프리젠 테이션 이름의 배열/목록을 유지할 수 있습니다. Windows에서 PPT는 프리젠 테이션을 열 때 발생하는 이벤트를 트랩 할 수 있지만 내가 아는 한 Mac PPT에서는 지원되지 않습니다. –

+0

@SteveRindsberg : Windows에서, 그 새로운 정보. 약간의 이벤트 만 지원하는 Mac PPT 및 업데이트에 감사드립니다. ppt Application.PresentationOpen 이벤트에는 하나의 이벤트가 있습니다. 각 프레젠테이션이 열릴 때 콜백 할 것입니다. 그러나이 이벤트는 Mac 버전에서는 지원되지 않습니다. 프레젠테이션을 열 때 식별 할 수있는 다른 방법이 있습니까? mac 활동 모니터링 또는 무엇인가 같은 것이 있습니까? –

답변

0

가능한 해결 방법은 열려있는 프레젠테이션을 루프 검사하고 이전에 열려있는 프레젠테이션과 비교하는 것입니다.

먼저이 스크립트가 실행되면 PowerPoint가 실행 중인지 확인합니다 (종료하지 않으면 -> 종료). PP가 실행되면 스크립트는 열려있는 프리젠 테이션의 수를 기록합니다.

그런 다음 스크립트는 루프를 거칩니다.이 예에서 반복 횟수는 100 회입니다 (테스트 만했지만 반복해야합니다). 각 반복마다 PP 프리젠 테이션 목록을 찾고 이전 목록과 비교합니다. 프리젠 테이션이 이전 목록에 없으면 새로운 것입니다. 열려 있습니다!

경고를 표시하는 PowerPoint를 종료하면 스크립트가 중지됩니다 (bloc 시도).

tell application "System Events" to set PP_Running to exists (processes where name is "Microsoft PowerPoint") 
if not PP_Running then return -- Power point is not launched ! 
tell application "Microsoft PowerPoint" to set Old_list to name of every presentation -- get initial list of open presentations 

repeat with I from 1 to 100 -- for test, but it should be repeat with no limit 

try 
    tell application "Microsoft PowerPoint" to set New_list to name of every presentation 
on error 
    display alert "PowerPoint no longer launched" 
    return -- quit the loop 
end try 
repeat with aDoc in New_list 
    if not (Old_list contains aDoc) then -- new document has been opened !! 
     set Old_list to New_list 
     log "Open new document = " & aDoc -- do what ever you need to do !! 
    end if 
end repeat 
delay 0.5 
set I to I + 1 
end repeat 

엘 캐피/PP 2011에서 테스트 :하지만 나는 '모든 프리젠 테이션의 이름'에서 PP 2011 년 PP 2016로 변경 아무것도 생각합니다.