MS Word 2013 VBA宏功能

MS Word 2013 VBA宏功能,vba,ms-word,Vba,Ms Word,以下VBA代码不会将打开的文档保存到活动“我的文档”文件夹下的子文件夹中。代码在App_DocumentBeforeClose中调用,执行时不会抛出错误标志或进程失败通知。所有代码和保存位置字符串的构建方式都与预期的方式相同——打开的文档不会保存到“我的文档”子文件夹中。文件本身是存储在SDHC芯片上的工作副本-这可能是问题所在吗?我已检查文件夹权限,子文件夹“只读”属性已关闭 Public Sub SaveToTwoLocations() Dim Res Dim oDoc As Documen

以下VBA代码不会将打开的文档保存到活动“我的文档”文件夹下的子文件夹中。代码在App_DocumentBeforeClose中调用,执行时不会抛出错误标志或进程失败通知。所有代码和保存位置字符串的构建方式都与预期的方式相同——打开的文档不会保存到“我的文档”子文件夹中。文件本身是存储在SDHC芯片上的工作副本-这可能是问题所在吗?我已检查文件夹权限,子文件夹“只读”属性已关闭

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
公共子存储ToToToWoLocations()
昏暗的
Dim oDoc作为文档,SourceFile作为字符串,DestinationFile作为字符串
Dim strBackUpPath作为字符串,fDialog作为文件对话框,Reps作为字符串,DocName作为字符串
如果正确(ActiveWindow.Caption,4)=“ode]”,则
DocName=Left(ActiveWindow.Caption,Len(ActiveWindow.Caption)-21)
ElseIf Right(ActiveWindow.Caption,5)=“.docx”然后
DocName=Left(ActiveWindow.Caption,Len(ActiveWindow.Caption)-5)
如果结束
错误转到由用户取消
Res=MsgBox(“保存源文件?”,vbQuestion+vbYesNo,“备份查询前保存原始文件”)
如果Res=vbYes,则
Application.ActiveDocument.Save
如果结束
如果GetSetting(“My_Books”,DocName,“Save_2”)=“”那么
设置fDialog=Application.FileDialog(msoFileDialogFolderPicker)
用fDialog
.Title=“选择要将副本保存到的文件夹并单击“确定”
.AllowMultiSelect=False
.InitialView=msoFileDialogViewList
如果.Show-1那么
MsgBox“已被用户取消”,“保存到两个位置”
出口接头
如果结束
strBackUpPath=fDialog.SelectedItems.Item(1)和“\”
Res=MsgBox(“将文件保存到选定的‘保存到’位置?”,vbQuestion+vbYesNo,“‘保存到’疑问状态”)
如果Res=vbYes,则
保存设置“我的书”,DocName,“保存2”,strBackUpPath
strBackUpPath=strBackUpPath&DocName&“.docx”
Application.ActiveDocument.SaveAs2(strBackUpPath)
其他的
出口接头
如果结束
以
其他的
strBackUpPath=GetSetting(“我的书”,DocName,“保存2”)
Res=MsgBox(“将此文档保存到:&strBackUpPath&“?”,vbQuestion+vbYesNo,“两个位置保存查询”)
如果Res=vbYes,则
如果正确(ActiveDocument.Name,1)=“x”,则
Application.ActiveDocument.SaveAs2(strBackUpPath=strBackUpPath&DocName&“.docx”)
其他的
MsgBox“非文档数据文件保存错误”,vbCritical,“第二位置文件保存错误”
转到用户已取消
如果结束
其他的
设置fDialog=Application.FileDialog(msoFileDialogSaveAs)
用fDialog
.Title=“选择要将副本保存到的文件夹并单击“确定”
.AllowMultiSelect=False
.InitialView=msoFileDialogViewList
如果.Show-1那么
MsgBox“用户已取消文件保存”,“已取消保存到两个位置”
出口接头
如果结束
以
如果结束
如果结束
用户取消:
端接头
应该是

Application.ActiveDocument.SaveAs2 strBackUpPath

代码应该是:Application.ActiveDocument.SaveAs2(strBackUpPath&DocName&“.docx”)。为我辩护,我要说的是,微软经常是它自己最大的敌人,原因在其他地方有充分的记录——对于最初编写的代码,它应该在标准VB6中工作,但VBA不是VB6。我要向Tim Williams表示感谢——虽然技术上不正确,但您让我得到了正确的答案,而且很可能编写的串联被编译器误解了。但是由于效率和紧凑性的原因,仍然需要重写时的串联。哦,现在我已经改正了我的错误,它工作得很好!谢谢大家

此行看起来错误(参数列表中有一个尝试赋值):Application.ActiveDocument.SaveAs2(strBackUpPath=strBackUpPath&DocName&“.docx”)Tim Williams-字符串生成过程必须考虑文档名在[ElseIf Right(ActiveWindow.Caption,5)=“.docx”处被截断的事实允许匹配标识先前存储的保存到位置的注册表项-这允许我区分当前正在处理的多个文档。是“.doc”和“.docx”文档都出现问题,还是仅前者出现问题?因为保存“.doc”文档的方式(在没有先前设置的情况下)显然是错误的。(在有先前设置的情况下,根据@bibadia更正代码)是的,这两种类型都适用-很抱歉,我之前没有想到,但是,作为测试,我修改了代码,将文件保存到“D”驱动器临时文件夹为.docx,它可以工作,因此问题是不允许宏将文件写入文档文件夹,也就是说,将信任中心设置为启用VBA项目对象模型的所有宏和信任访问-问题通常是Microsoft。现在我必须找到解决办法,因为微软当然没有人知道怎么做。多典型啊!仅供参考,“Microsoft AMIRITE?”评论在这里没有得分。代码应该是:Application.ActiveDocument.SaveAs2(strBackUpPath&DocName&“.docx”)。为我辩护,我要说,微软往往是它自己最大的敌人,其原因在其他地方有充分的记录——就像最初编写的代码一样,它可以在标准VB6中工作,但VBA不是VB6。我要向Tim Williams表示感谢——虽然技术上不正确,但您让我得到了正确的答案,而且很可能编写的串联被编译器误解了。但是由于效率的原因,重写后的连接仍然是必需的。谢谢哦,现在我已经改正了我的错误,它工作得很好!
Application.ActiveDocument.SaveAs2 strBackUpPath