【问题标题】:Error 5941 VBA Word 2016 - Save file, get name from table错误 5941 VBA Word 2016 - 保存文件,从表中获取名称
【发布时间】:2018-05-21 21:01:48
【问题描述】:

我正在尝试按页拆分我的 word 文档,并将拆分保存为新文件,这些文件从每个页面上相同的各个表格中的单元格命名。我遇到的错误是:

运行时错误“5941”:

请求的集合成员不存在。

到目前为止我的代码是:

Sub splitter()
'
'
Dim Counter As Long, Source As Document, Target As Document
Set Source = ActiveDocument
Selection.HomeKey Unit:=wdStory
Pages = Source.BuiltInDocumentProperties(wdPropertyPages)
Counter = 0
While Counter < Pages
Counter = Counter + 1
DocName = "" _
    & Left(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text))
Source.Bookmarks("\Page").Range.Cut
Set Target = Documents.Add
Target.Range.Paste
Target.SaveAs FileName:=DocName
Target.Close
Wend
End Sub

标题中指定的错误发生在这些代码行中:

DocName = "" _
    & Left(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(3).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(5).Rows(1).Cells(2).Range.Text)) _
    & Left(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text, _
        Len(ActiveDocument.Tables(6).Rows(1).Cells(2).Range.Text))

我不确定如何解决此错误。

第二个问题是在这段代码中我可以在哪里设置文档保存到的目录?

【问题讨论】:

  • 文档中是否有(至少)六个表格?该文件是您认为的“活跃”文件吗?这些表中的每一个是否都有(至少)两个单元格?请注意,由于您在开始时将活动文档设置为Source,因此在这些代码行中您仍应使用Source - 而不是ActiveDocument
  • 如果你剪切一页,Table(2) 变成 Table(1)。 ;-) 最好向后循环 - 或者总是参考表(1)
  • 我每页有 8 个表;我 99.99% 确定它是“活动”文档。我已经对我的代码进行了修改,感谢您指出这一点!我知道在同一段代码中收到“424”Object required 错误......你知道可能导致这种情况的原因吗?我需要定义它吗?
  • 在你的位置,我可能会单步执行代码 (F8) 以确定触发它的确切行。我还将声明并分配给一个 Range 对象(或多个对象),并在逐步使用 Range.Select 以查看 VBA 认为正确的范围是否与您认为应该使用的范围相同。
  • 附加说明:Bookmarks("\Page") 将引用当前的 SELECTION(包含选择的页面)。事情可能会出错,因为这不是您所期望的 - 选择表格/行/单元格范围之一也可能会有所帮助。

标签: vba ms-word word-2016


【解决方案1】:

至少部分问题在于您正在获取每个单元格的单元格结尾字符。试试:

DocName = "" _
    & Split(Source.Tables(3).Cell(1 ,2).Range.Text, vbCr)(0) _
    & Split(Source.Tables(5).Cell(1, 2).Range.Text, vbCr)(0) _
    & Split(Source.Tables(6).Cell(1, 2).Range.Text, vbCr)(0)

您也没有提供文件扩展名、格式等作为 SaveAs 的一部分。

您可能还对 将合并的输出拆分到单独的文档感兴趣,在 Mailmerge 提示和技巧 线程中:http://www.msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html,其中展示了如何提供所需的 SaveAs 参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多