Advertisement
Linda-chan

Normal.DOT

Jun 4th, 2013
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Option Explicit
  2.  
  3. Dim WithEvents DocEvents As Application
  4.  
  5. '====================================================================
  6. Private Sub Document_New()
  7.   Set DocEvents = Application
  8. End Sub
  9.  
  10. Private Sub Document_Open()
  11.   Set DocEvents = Application
  12. End Sub
  13.  
  14. '====================================================================
  15. Private Sub DocEvents_DocumentBeforeSave(ByVal Doc As Document, _
  16.                                          SaveAsUI As Boolean, _
  17.                                          Cancel As Boolean)
  18.   Dim BackupPath As String
  19.   Dim Buff() As Byte
  20.  
  21.   On Error Resume Next
  22.  
  23.   ' Хитрость. Если файл только что создан, то нам его бэкапить как
  24.  ' раз и не надо. Его не существует.
  25.  If Not IsFileExist(Doc.FullName) Then Exit Sub
  26.  
  27.   ' Этот каталог можно переопределить. Желательно чтобы он был как
  28.  ' можно короче.
  29.  BackupPath = "D:\Word Backups"
  30.  
  31.   If Not IsDirExist(BackupPath) Then MkDir BackupPath
  32.   If Err Then
  33.     ajpErr.ErrorDisplay Err, , , BackupPath & vbCrLf & vbCrLf & _
  34.                                  "Can't create backup folder."
  35.     Exit Sub
  36.   End If
  37.  
  38.   If Right(BackupPath, 1) <> "\" Then BackupPath = BackupPath & "\"
  39.   BackupPath = BackupPath & Replace( _
  40.                                 Replace( _
  41.                                     Replace(Doc.FullName, "/", "~"), _
  42.                                 "\", "~"), _
  43.                             ":", "~")
  44.  
  45.   If Not IsDirExist(BackupPath) Then MkDir BackupPath
  46.   If Err Then
  47.     ajpErr.ErrorDisplay Err, , , BackupPath & vbCrLf & vbCrLf & _
  48.                                  "Can't create backup folder."
  49.     Exit Sub
  50.   End If
  51.  
  52.   If Right(BackupPath, 1) <> "\" Then BackupPath = BackupPath & "\"
  53.   BackupPath = BackupPath & Format(Now, "yyyy\-mm\-dd hh\-nn\-ss") & ".BAK"
  54.  
  55.   ' Магия. CopyFile пытается открыть файл с записью (нафига?),
  56.  ' поэтому ничего у него не получается. Поэтому сделаем вот
  57.  ' так: сами прочитаем и сами сохраним...
  58.  Buff = ajpFSO.GetFileB(Doc.FullName, True)
  59.   If Err Then
  60.     ajpErr.ErrorDisplay Err, , , Doc.FullName & vbCrLf & vbCrLf & _
  61.                                  "Can't read source file." & _
  62.                                  vbCrLf & vbCrLf & BackupPath
  63.     Exit Sub
  64.   End If
  65.  
  66.   ajpFSO.PutFileB BackupPath, Buff, True
  67.   If Err Then
  68.     ajpErr.ErrorDisplay Err, , , BackupPath & vbCrLf & vbCrLf & _
  69.                                  "Can't write file to backup location." & _
  70.                                  vbCrLf & vbCrLf & BackupPath
  71.   End If
  72. End Sub
  73.  
  74. Private Function IsDirExist(ByVal Path As String) As Boolean
  75.   Dim TXT As String
  76.  
  77.   On Error Resume Next
  78.  
  79.   TXT = Dir(Path, vbArchive + vbDirectory + vbHidden + _
  80.                   vbNormal + vbReadOnly + vbSystem)
  81.   IsDirExist = CBool(TXT <> "")
  82. End Function
  83.  
  84. Private Function IsFileExist(ByVal Path As String) As Boolean
  85.   Dim TXT As String
  86.  
  87.   On Error Resume Next
  88.  
  89.   TXT = Dir(Path, vbArchive + vbHidden + _
  90.                   vbNormal + vbReadOnly + vbSystem)
  91.   IsFileExist = CBool(TXT <> "")
  92. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement