【问题标题】:Is there VBA Code to see if Enterprise Project 2013 file is checked out before opening?是否有 VBA 代码可以在打开之前查看 Enterprise Project 2013 文件是否已签出?
【发布时间】:2016-12-17 02:17:30
【问题描述】:

试图用一些 VBA 代码帮助我们的 Project 2013 用户,但我们似乎无法找到答案来查找是否使用 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 代码签出,请告诉我。谢谢!

【问题讨论】:

  • 是您要查看的项目是否已在主项目中签出?
  • 不,这些不是主项目的一部分。我们目前有主项目被禁止。
  • @大卫。我认为微软的这个 sn-p 可能会有所帮助:msdn.microsoft.com/en-us/library/office/jj820423.aspx。基本上,您想从 Projects 集合中选择项目,并检查它的项目类型(企业与非企业)。然后有一些Project级别的签入和签出方法。
  • 感谢 Ryan,我之前尝试过这段代码,它只会检查当前打开的项目,而不会查看企业项目。
  • 通过项目集合中的每个项目迭代返回的 Project.Type 是什么?

标签: vba ms-project


【解决方案1】:

我们创建了一个适用于规划者的解决方法,但我们必须以任何一种方式打开文件。这将做的是在只读模式下打开文件,然后尝试在没有警报的情况下将其签出。之后,如果我检查了它(这意味着没有其他人检查过它),它将设置 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

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多