Yea, that's what I am doing. I use VBA to kick off Project Professional to
open the project, calc, and save.
However, I'm not sure what would happen using project server software. I
kind of wrote our own version using the save as ODBC option. It's not as
clean, but allowed me to develop a custom timesheet entry process that would
merge Projects, Unicenter, Kronos, and Peoplesoft allowing for 1 point of
entry for all hours.
If the project is assigned to you, it shows up on your timesheet. If a
ticket is opened in Unicenter and assigned to you, it shows up on your
timesheet. The hours then flow back to those systems, as well as Kronos for
hourly employees.
Everything then gets merged into PS financials/hr. I still have a few bugs
to work out, and it does have some questionable areas. But if I get some
more time to work on it, I should have a nice full solution.
I coded the script in MS Access (VBA) using a link into the database where
the projects were stored. I don't know if it's any help, but it's purely
bare bones. It's one of those things where the PMs didn't want to download
the projects manually (only have 30 or so) and I only had a few hours to
dedicate to the task. It definately has some issues with error messages (bad
custom macros, contraint issues, etc.), but you just have to sit there and
hit OK for those.
Public Function ExportProjects()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim sql, filename As String
Dim objPrj As Object
Set objPrj = CreateObject(Class:="MSProject.Application") 'Create an instance
sql = "select PROJ_NAME from PROJECT_MSP_PROJECTS WHERE PROJ_EXT_EDITED = 1"
rs.Open sql, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
With rs
While Not .EOF
PrjFileName = "<DBID>\" + .Fields(0).Value
NewPrjFileName = "<PATH>\" + .Fields(0).Value
Call objPrj.Alerts(False)
objPrj.DisplayAlerts = False
objPrj.FileOpen Name:=PrjFileName, ReadOnly:=False, UserID:="<USERID>",
DatabasePassWord:="<PASSWORD>", noAuto:=True, openPool:=4
Call objPrj.FileSave
Call objPrj.FileSaveas(NewPrjFileName)
Call objPrj.FileClose
.MoveNext
Wend
End With
End Function