2016-08-10 7 views
6

Project 2013 사용자가 VBA 코드를 사용하도록 도와 주려고 했으므로 VBA를 사용하여 PWA 서버에서 Project 2013 파일을 체크 아웃했는지 확인할 수없는 경우가 있습니다. 기본적으로 단일 프로젝트 파일에 작업 목록으로 설정된 프로젝트 목록이 있으며 VBA 코드는 FileOpenEx를 실행하기위한 작업 목록을 반복하고 일부 변경 작업을 수행 한 다음 닫습니다. 그러나 목록의 각 프로젝트에서 FileOpenEx를 실행하기 전에 프로젝트 파일이 체크 아웃되었는지 여부를 확인할 수 있어야합니다. 여기에 내가하고자하는 것을 수행하는 샘플이 있습니다.Enterprise Project 2013 파일을 열기 전에 체크 아웃하는 VBA 코드가 있습니까?

SelectBeginning 
While ActiveCell.CellColor <> pjBlack 
    fname = "<>\" & ActiveCell.Task.Name 
    justname = ActiveCell.Task.Name 

    On Error Resume Next 
    If Application.Projects.CanCheckOut(fname) Then '<--This does not work correctly, not checking Enterprise Projects? 
     FileOpenEx Name:=fname, ReadOnly=false 
     'Do Some stuff 
     FileCloseEx Save:=pjSave, CheckIn:=True 
     FileSave 
    Else 
     MsgBox (justname & " can not be checked out") 
    End If 

    SelectCell Row:=1 
Wend 

사람이 더 나은 솔루션,이를 확인하는 쉬운 방법, 또는 엔터프라이즈 프로젝트는 VBA 코드를 통해 체크 아웃하는 경우 알려 주시기 바랍니다 찾는 또 다른 해결 방법이있는 경우. 감사!

+0

프로젝트가 마스터 프로젝트에서 체크 아웃되어 있는지 확인하려는 프로젝트입니까? –

+0

아니요, 이들은 마스터 프로젝트의 일부가 아닙니다. 현재 마스터 프로젝트를 허용하지 않았습니다. –

+0

@ David. https://msdn.microsoft.com/en-us/library/office/jj820423.aspx에서이 스 니펫이 도움이 될 것이라고 생각합니다. 기본적으로 Projects 컬렉션에서 프로젝트를 선택하고 프로젝트 컬렉션의 유형을 확인하고자합니다 (엔터프라이즈와 그렇지 않은 경우). 그런 다음 체크인 및 체크 아웃을위한 프로젝트 레벨에서 몇 가지 방법이 있습니다. –

답변

0

계획 작성자에게 적합한 해결 방법을 만들었지 만 파일을 열어야합니다. 이 작업을 수행하려면 파일을 읽기 전용 모드로 연 다음 알림없이 체크 아웃하십시오. 이후에 체크 아웃했다면 (체크 아웃 한 사람이 없다는 뜻입니다) j = 0으로 설정하고 저장 한 후 다음 프로젝트로 이동합니다. 다른 사람이 체크 아웃했다면, 'errorhandler'로 가서 저장하지 않고 닫고 나중에 반환 할 문자열에 파일 이름을 저장합니다.

SelectBeginning 
While ActiveCell.CellColor <> pjBlack 
    fname = "<>\" & ActiveCell.Task.Name 
    justname = ActiveCell.Task.Name 
    FileOpenEx Name:=fname, ReadOnly=true 
    Set ProjToOpen = Application.Projects.Application.ActiveProject 
    j = 1 
    Application.DisplayAlerts = False 
    ProjToOpen.Checkout Project 
    Application.DisplayAlerts = True 

    If Not Application.IsCheckedOut(ProjToOpen.Name) Then 
     GoTo errorhandler 
    End If 

    'Perform actions here 

    j = 0 
    FileCloseEx Save:=pjSave, CheckIn:=True 
    FileSave 
errorhandler: 
    If Not j = 0 Then 
     ReDim Preserve skippedfiles(0 to skipped) As String 
     skippedfiles(skipped) = justname 
     skipped = skipped + 1 
     ProjToOpen.Application.FileCloseEx Save:=pjDoNotSave 
     GoTo GoToNextProj 
    End If 

GoToNextProj: 
    SelectCell Row:=1 

Wend 
msgstring = Join(skippedfiles(), vbCr) 

MsgBox "Here are the files that were already checked out and therefore not changed: " & vbCr & msgstring