Word VBA .SaveAs2弹出消息(在某​​些情况下)

时间:2014-04-11 07:15:37

标签: vba sharepoint ms-word word-vba

  • SharePoint 2010
  • Word 2010
  • Windows 7企业版

我有一个存在于SharePoint文档库中的.docm文件。打开时,宏会触发并提示用户输入新的文件名和文件夹,然后使用.SaveAs2将指定位置的文件副本保存为不带宏的.docx文件。

我无法使用具有正确.dotm的SP内容类型作为模板,因为库中有超过30种不同的文件模板。我必须在SharePoint库中使用.docm,然后确保用户将该文件的副本保存到其个人驱动器中。

所以我在open事件中使用了一些代码。我让用户指定一个文件夹和一个文件名。然后.SaveAs2获取这些参数,并将当前文件保存在新路径中,新名称为不带宏的普通.docx文件。我将为您提供有关如何收集strFolderstrDoc的详细信息。请放心,他们存在。我有一个带有完整文件名的debug.print,它是正确的。

With o
    .SaveAs2 strFolder & strDoc & ".docx", wdFormatDocumentDefault
End With

问题是此代码会显示一条消息,指出无法找到该文件。 enter image description here

嗯,呃,我正在尝试将文件保存在这个位置。当然它不存在。这才是重点。 (请注意,该文件夹确实存在。)

关闭消息框后,Word会愉快地将文件保存到指定位置。

此外,只有在SharePoint的“读取”模式下打开原始文件并且新文件路径位于网络驱动器上时,才会弹出消息。

如果

,则不会弹出消息
  • 在编辑模式下打开文件(单击SharePoint文件,在下一个对话框中选择编辑),或者如果
  • 文件保存到本地驱动器(C :)或
  • 从File>中打开文件最近的后台对话框。

在生产系统中,用户将无法选择“编辑”或“只读”。它们将默认为只读。此外,用户将无法保存到本地C:\驱动器,因为业务系统将其配置文件和“我的文档”放在网络驱动器上(H :)。

我试过了

  • 使用其他方法保存文件:使用msoFileDialogSaveAs - 相同的消息
  • 使用Application.DisplayAlert = False(我知道,但我绝望)或wdAlertsNone来抑制消息。 - 不起作用。消息仍然显示
  • 使用Application.ScreenUpdating = False抑制消息。不行。该消息仍显示。
  • 使用错误处理On Error Resume NextOn Error Goto MyHandler来抑制消息,但会弹出消息而不会触发错误处理程序。该消息具有蓝色的“i”图标,因此可能不会将其解释为错误,而是作为一条信息。

如何消息消失?

此外,虽然这不是必不可少的,但我们很高兴知道:

  • 为什么将文件保存到新位置时,“读取”或“编辑”模式是否重要?
  • 为什么文件的新位置(网络路径或本地路径)在保存时很重要?
  • 为什么在文件正确保存后会出现消息?

2 个答案:

答案 0 :(得分:1)

在几次徒劳的尝试改变SharePoint以只读模式提供文档的方式后,我使用以下方法创建一个新的Word文档,将其保存到用户的临时文件夹,将文档从临时文件夹复制到文件夹先前由用户指定。现在文档存在并且使用SaveAs不会触发错误消息。

在下面的代码运行之前,用户已经定义了文件名(strDoc)和要保存到的文档的文件夹。

' since we get an annoying message when trying to save to a network drive while
' in read only mode, we first create a new, empty file in the user's temp folder,
' then copy that empty file to the specified folder
' set the temp folder and full path
tempFolder = Environ("Temp")
tempPath = tempFolder & "\" & strDoc & ".docx"
' create a new document
Documents.Add DocumentType:=wdNewBlankDocument
ChangeFileOpenDirectory tempFolder
' save to temp folder and close
With ActiveDocument
    .SaveAs2 tempPath, wdFormatDocumentDefault
    .Close
End With
' copy from temp folder to previously defined destination
FileCopy tempPath, fullPath
' delete the temp file
KillFile = tempPath
' finally, save the contract over the empty file
With o
    .SaveAs2 fullPath, wdFormatDocumentDefault
End With

答案 1 :(得分:0)

这是基于一些谷歌搜索和类似经历的黑暗镜头: http://blogs.technet.com/b/wordonenotesupport/archive/2009/02/07/word-2007-file-save-errors-an-error-is-displayed-when-attempting-to-save-a-word-document.aspx

相关位:

  
      
  • "<path and file name>" cannot be found. Check your spelling, or try a different path.

  •   
  • <path and file name> is currently in use. Try again later.

  •   
  • Word cannot complete the save to due to a file permissions error.
  •   
     

如果Word 2007正在使用,您可能会看到上述错误   与防病毒软件发生冲突。大多数冲突都是   由防病毒软件制造商解决,但你必须   下载并安装防病毒软件的更新或修补程序   (而不仅仅是新的病毒定义)来解决问题。见   软件制造商的网站,可能的更新和   有关配置问题的知识库文章。

...然后从迈克菲描述相关问题: https://kc.mcafee.com/corporate/index?page=content&id=KB75449

我发现大多数论坛讨论涉及服务器端实时反病毒扫描 - 这与Office 2010的保存机制之间的行为之间的相互作用有关,而不是基于访问的实时文件扫描。

即使这不能解决您的问题,也希望它有所帮助!