试图帮助我们的 Project 2013 用户使用一些 VBA 代码,但我们似乎无法找到答案来查找是否使用 VBA 在我们的 PWA 服务器上检出 Project 2013 文件。它们基本上有一个项目列表,设置为单个项目文件中的任务,VBA 代码循环遍历任务列表以运行 FileOpenEx,进行一些更改,然后关闭它。但是,需要能够在对列表中的每个项目运行 FileOpenEx 之前检查项目文件是否已检出。这是我想要的示例,但它并没有完全达到我想要的效果。
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 代码签出的其他解决方法,请告诉我。谢谢!
我们创建了一个适合规划者的解决方法,但我们必须以任何一种方式打开文件。这样做是以只读模式打开文件,然后尝试在没有警报的情况下检查它。之后,如果我将其签出(这意味着没有其他人签出),它将设置 j=0 并保存,然后继续进行下一个项目。如果其他人签出了它,那么它将转到“错误处理程序”,它告诉项目关闭而不保存,并将文件名保存在稍后返回的字符串中。
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)