Следующий код VBA не сохранит открытый документ в подпапке под активной папкой «Мои документы». Код вызывается из App_DocumentBeforeClose и выполняется без сброса флага ошибки или уведомления об ошибке процесса. Весь код и сохранение строкового строя строятся так, как предполагалось, - открытый документ просто не сохраняется в подпапку «Мои документы». Сам файл является рабочей копией, хранящейся на чипе SDHC, - может ли это быть проблемой? Я проверил права на папку и отключил атрибут «Только для чтения» подпапки.MS Word 2013 VBA Macro Function
Public Sub SaveToTwoLocations()
Dim Res
Dim oDoc As Document, SourceFile As String, DestinationFile As String
Dim strBackUpPath As String, fDialog As FileDialog, Reps, DocName As String
If Right(ActiveWindow.Caption, 4) = "ode]" Then
DocName = Left(ActiveWindow.Caption, Len(ActiveWindow.Caption) - 21)
ElseIf Right(ActiveWindow.Caption, 5) = ".docx" Then
DocName = Left(ActiveWindow.Caption, Len(ActiveWindow.Caption) - 5)
End If
On Error GoTo CanceledByUser
Res = MsgBox("Save Source File?", vbQuestion + vbYesNo, "Save Original Prior to Back-Up Interrogative")
If Res = vbYes Then
Application.ActiveDocument.Save
End If
If GetSetting("My_Books", DocName, "Save_2") = "" Then
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
With fDialog
.Title = "Select Folder to Save The Copy To & Click Ok"
.AllowMultiSelect = False
.InitialView = msoFileDialogViewList
If .Show <> -1 Then
MsgBox "Canceled By user", , "Save To Two Locatiions"
Exit Sub
End If
strBackUpPath = fDialog.SelectedItems.Item(1) & "\"
Res = MsgBox("Save File To Selected 'SaveTo' Location?", vbQuestion + vbYesNo, "'SaveTo' Interrogative")
If Res = vbYes Then
SaveSetting "My_Books", DocName, "Save_2", strBackUpPath
strBackUpPath = strBackUpPath & DocName & ".docx"
Application.ActiveDocument.SaveAs2 (strBackUpPath)
Else
Exit Sub
End If
End With
Else
strBackUpPath = GetSetting("My_Books", DocName, "Save_2")
Res = MsgBox("Save This Document To: " & strBackUpPath & "?", vbQuestion + vbYesNo, "Two Location Save Interrogative")
If Res = vbYes Then
If Right(ActiveDocument.Name, 1) = "x" Then
Application.ActiveDocument.SaveAs2 (strBackUpPath = strBackUpPath & DocName & ".docx")
Else
MsgBox "Non-docx Doument File Save Error", vbCritical, "2nd Location File Save Error"
GoTo CanceledByUser
End If
Else
Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
With fDialog
.Title = "Select Folder to Save The Copy To & Click Ok"
.AllowMultiSelect = False
.InitialView = msoFileDialogViewList
If .Show <> -1 Then
MsgBox "File Save Canceled By User", , "Save To Two Locatiions Canceled"
Exit Sub
End If
End With
End If
End If
CanceledByUser:
End Sub
Эта строка выглядит неправильно (с попыткой присвоения в списке параметров): Application.ActiveDocument.SaveAs2 (strBackUpPath = strBackUpPath & DocName & ".docx") –
Тим Уильямс - Процесс построения строки должен учитывать тот факт, что имя документа было усечено в [ElseIf Right (ActiveWindow.Caption, 5) = ".docx" Then], чтобы разрешить сопоставление ключа реестра, идентифицирующего ранее сохраненное сохранение в местоположении, - это позволяет мне различать несколько документов, которые в настоящее время обрабатываются , – RockyFaher
Возникает ли проблема для документов «.doc» и «.docx» или только для первого? Поскольку способ сохранения документа «.doc» (в случае отсутствия предыдущих настроек) явно ошибочен. (В случае, когда есть предыдущая настройка, исправьте код в соответствии с @bibadia) –