View Full Version : Saving a backup copy of Project file to a specified path in VBA
Grizz
11-06-2015, 05:27 AM
Hi,
I am fairly familiar with Excel VBA but not so much with Project.
With some of my Excel files I have a VBA routine to save a backup copy of the file:
Public Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Dim MyBackupPath As String
MyBackupPath = "C:\Backups\"
ActiveWorkbook.SaveCopyAs MyBackupPath & Format(Now, "dd.mm.yy - h.mm AM/PM") & " - " & Application.UserName & " " & ActiveWorkbook.Name
If ThisWorkbook.Saved = False Then
ThisWorkbook.Save
End If
Application.DisplayAlerts = True
End Sub
I would like to do the same with a MS Project file but after having changed the obvious "ActiveWorkbook" to "ActiveProject" I'm still getting runtime errors on that line.
Please can anyone point out what I'm doing wrong?
Thanks
itConsultant
12-18-2015, 08:27 AM
Hi,
i don't know whether it is still relevant for you.
Here is how i did it:
Navigate to the Visual Basic editor and add the before_close method inside of "ThisProject"
Private Sub Project_BeforeClose(ByVal pj As Project)
Dim targetFolder As String
targetFolder = "\\server\xyz"
If Not Application.ActiveProject.Saved Then Exit Sub
If LCase(Application.UserName) = "myuser" Then
Dim answer As Integer
answer = MsgBox("Do you want to copy the ActiveProject to the following network share? " & vbNewLine & vbNewLine & targetFolder, vbYesNo + vbQuestion, "Copy file to network share")
If answer = vbYes Then
copyFile Application.ActiveProject.FullName, targetFolder
End If
End If
End Sub
Put this anywhere inside of a module:
Sub copyFile(ByVal fileUrl As String, ByVal targetFolder As String)
Dim FSO
Dim sFile As String
Dim sSFolder As String
Dim sDFolder As String
sFile = getFilenameFromPath(fileUrl)
sSFolder = Replace(fileUrl, getFilenameFromPath(fileUrl), "")
sDFolder = targetFolder
If isFile(sDFolder & sFile) Then Kill sDFolder & sFile
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(sSFolder & sFile) Then
FSO.copyFile (sSFolder & sFile), sDFolder, True
End If
End Sub
Public Function isFile(ByVal fName As String) As Boolean 'Returns TRUE if the provided name points to an existing file. Returns FALSE if not existing, or if it's a folder
On Error Resume Next
isFile = ((GetAttr(fName) And vbDirectory) <> vbDirectory)
End Function
Public Function getFilenameFromPath(ByVal strPath As String) As String ' Returns the rightmost characters of a string upto but not including the rightmost '\' -> e.g. 'c:\winnt\win.ini' returns 'win.ini'
Dim separator As String
separator = "\"
If strPath Like "http*" Then
separator = "/"
End If
If Right$(strPath, 1) <> separator And Len(strPath) > 0 Then
getFilenameFromPath = getFilenameFromPath(Left$(strPath, Len(strPath) - 1)) + Right$(strPath, 1)
End If
End Function
Have fun!
Merry christmas to ya all.
Best regards from Germany
Joerg
itConsultant
12-18-2015, 08:31 AM
P.S.: "File save as" must look like:
FileSaveAs Name:="C:\temp\file.mpp", FormatID:="MSProject.MPP"
and just save is:
FileSave
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.