【问题标题】:Run Time Error 5 - Invalid Procedure Call or Argument - While Saving Word Document运行时错误 5 - 无效的过程调用或参数 - 保存 Word 文档时
【发布时间】:2019-07-16 11:56:44
【问题描述】:

我一直在尝试解决这个错误,但我在网上找到的任何东西似乎都没有帮助。基本上,我在 excel VBA 中运行一个脚本,该脚本打开一个 word 文档,然后打开“另存为”对话框,以便我可以使用我选择的名称/位置保存文件。正是在这一点上,我得到了运行时错误 5。

我正在使用 Do Loop 来尝试绕过错误,并且它工作了一段时间。但由于某种原因,问题又回来了,我不知道为什么。

我添加了一个 Do 循环,它可以阻止代码向前移动,直到文件有了名称。这工作了一段时间,但几个小时后神秘地停止工作

Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Set wdApp = GetObject(, "Word.Application")

If Err.Number <> 0 Then 'Word isn't already running
    Set wdApp = CreateObject("Word.Application")
End If

On Error GoTo 0
Set wdDoc = wdApp.Documents.Open(OFile)

'Clear the variable that contains the file path/name
SveReportName = ""


'Save word document as a new file
Set SveReport = wdApp.ActiveDocument.Application.FileDialog(msoFileDialogSaveAs)
With SveReport
' 3 is for 97-2003 - include for 2010, remove for 2003
    .FilterIndex = 3
    .Show
    SveReportName = SveReport.SelectedItems.Item(1)
    'This Do statement is here so that VBA just keeps adding 1+1 until the user has had time to name the tech report file, it should stop Run Time Error 5 from appearing
    Do
        a = 1 + 1
    Loop Until IsNull(SveReportName) = False
    wdDoc.SaveAs SveReportName
End With

知道还会发生什么吗?

提前致谢!

【问题讨论】:

  • 我不知道你期望Do a = 1 + 1 完成什么,但它并没有做任何可能的事情。在您访问 SelectedItems 之前,您也没有检查用户是否取消了对话框
  • @KenWhite 1+1 本身并不意味着做任何事情,它只是运行一些代码,直到 IsNull(SveReportName) = False。这个想法是,这会阻止下一行运行,直到我为文件命名。
  • 不,它不是这样做的。对话框上的.Show 阻止代码继续执行,直到用户选择文件或取消对话框。在您可以使用SeReportName = 命名文件并调用wdDoc.SaveAs 之前,没有任何进展。你只是无缘无故地旋转轮子(或者如果用户选择文件名,什么也不做)。当您在调试器中单步执行代码时,具体是哪一行导致了错误?
  • @KenWhite 感谢您的注意,我不知道这一点。当我逐行运行代码时,我从未收到错误,一切顺利。仅当我一起运行这批代码时,在“另存为”对话框出现之后,并且在我能够命名和保存文件之前,才会出现该错误。这就是为什么我假设在我完成文件命名之前代码试图继续前进。
  • @KenWhite 我又试了一次,通过在每一行之前放置一个停止命令,并能够找出错误发生在 SveReportName = SveReport.SelectedItems.Item(1) 处。我修改了代码并能够修复它。谢谢您的帮助!这是修改后的代码:'''Set SveReport = wdApp.ActiveDocument.Application.FileDialog(msoFileDialogSaveAs) With SveReport .FilterIndex = 3 If .Show = -1 Then .Execute End With SveReportName = wdDoc.Path & "\" & wdDoc .Name Sheets("Start").Range("C13").Value = SveReportName'''

标签: excel vba ms-word


【解决方案1】:

阅读有关您正在使用的对象的 MS 文档,特别是关于执行方法的注释,该方法应在另存为的 show 方法之后立即使用:

https://docs.microsoft.com/en-us/office/vba/api/office.filedialog.show

我认为它会将您的“保存”代码简化为这样的内容,尽管我还没有尝试过:

'Save word document as a new file
Set SveReport = wdApp.ActiveDocument.Application.FileDialog(msoFileDialogSaveAs)
With SveReport
    .FilterIndex = 3
    if .Show = -1 then .Execute
End With

【讨论】:

  • 谢谢!在你和肯·怀特的帮助下,我能够弄清楚。您提供的代码有效,导致错误的行是“SveReportName = SveReport.SelectedItems.Item(1)”。我查看了要显示的代码: ______________________________ Set SveReport = wdApp.ActiveDocument.Application.FileDialog(msoFileDialogSaveAs) ________With SveReport ________ .FilterIndex = 3 ________ If .Show = -1 Then .Execute ________End With ________SveReportName = wdDoc.Path & "\" & wdDoc.Name ________Sheets("Start").Range("C13").Value = SveReportName"
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2019-06-13
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多