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