【问题标题】:Setting range in Word with VBA in Excel在 Excel 中使用 VBA 在 Word 中设置范围
【发布时间】:2020-03-21 18:46:57
【问题描述】:

在 Excel 中使用 VBA 打开该文件时如何在 Word 中设置范围?

Dim wordApp As Word.Application
Dim wordObject As Word.Document
Dim wordRange As Word.Range

Dim filePath As String
Dim fileName As String

filePath = "C:\Users\"
fileName = "somename.docx"

Set wordApp = CreateObject("Word.Application")

With wordApp
    .Visible = True
    .Activate
    .WindowState = wdWindowStateNormal
End With

Set wordObject = wordApp.Documents.Open(filePath & fileName)

Set wordRange = Documents(fileName).Sections(1).Range

With wordRange
    'code
End With

造成问题的线路:

Set wordRange = Documents(fileName).Sections(1).Range

不管我在此返回的字符串是什么

4160 运行时错误“错误的文件名”

如果我使用ActiveDocument 而不是Documents(),我会得到

4248 运行时错误:“此命令不可用,因为没有打开文档”。

即使在运行代码时打开多个未保存和保存的 Word 文档后,错误仍然存​​在,只是显示相同的错误消息。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    Set wordRange = Documents(fileName).Sections(1).Range 错误,因为 Excel 不知道 Documents 是什么(或者它会将其解析为 Word.Documents 以外的其他内容)

    要解决这个问题,您可以使用(就像您在上一行中所做的那样)

    Set wordRange = wordApp.Documents(fileName).Sections(1).Range
    

    也就是说,您已经将Set Document(filepath & filename) 变为wordObject,所以使用它:

    Set wordRange = wordObject.Sections(1).Range


    此外,Excel 不知道wdWindowStateNormal,因此会创建一个新的Variant 变量(除非您有Option Explicit,您应该这样做,始终)并分配默认值@ 987654332@。这恰好是 Word.wdWindowStateNormal 的值,所以没有伤害,但代码具有误导性。

    要修复,请使用

    .WindowState = 0 'wdWindowStateNormal
    

    我很好奇您创建对象的方式。使用早期绑定,而不是创建New Word.Application,而是使用CreateObject

    • 这是一个有意的决定吗?
    • 有什么好处?

    【讨论】:

    • @chrisneilsen 我猜 OP 使用 CreateObject,因为这里和其他地方的许多代码示例都使用它而不是 New。我看到的几乎每个从 Excel(和 Access)中操纵另一个应用程序的问题都使用CreateObject。诚然,大多数人也使用后期绑定,但不是全部......这里的答案可能会受益于对早期绑定和后期绑定是什么以及如何正确使用它们的解释,因为 OP 几乎肯定不理解其中的区别。
    • @cindy 是的,我同意。该评论是导致当前版本的答案(不知道您是否看到那些)的最后一次来回,现在已被清理。单独留下它没有多大意义,我会尽快删除它。我认为在 this Q+A 中添加有关早期和后期绑定的讨论没有意义,但是您知道可以参考的良好规范吗?
    • @chrisneilsen 我没有链接,但我确定网站上肯定有链接。是的,这样的链接可能比完整的解释更好。 FWIW 我标记了其余的 cmets 进行清理,这就是促使我发表评论的原因。我还会在答案末尾删除这些问题,因为看起来 OP 没有响应......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多