【问题标题】:How to use Words selection methods through Excel VBA如何通过 Excel VBA 使用 Words 选择方法
【发布时间】:2019-02-05 14:12:12
【问题描述】:

在 Word VBA 中,您可以使用 Selection.MoveLeft、Selection.MovRight 等设置和移动光标位置...

但是,在 Excel VBA 中尝试使用相同的方法时,我收到一条错误消息,提示“对象不支持此属性或方法。”

我已导入 Word 对象库参考。

如何在 Excel 应用程序上使用 VBA 移动 Word 文档上的光标位置。任何帮助将不胜感激。

代码: 设置 Doc = ActiveDocument.Content

    With Doc.Find
    .Execute FindText:="*", ReplaceWith:="NEW*"
    End With

    Selection.HomeKey Unit:=wdStory
    Selection.MoveDown Unit:=wdParagraph, Count:=11
    Selection.MoveRight Unit:=wdWord, Count:=4
    Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
    Selection.Font.Bold = False
    Selection.Font.Name = "Arial"
    Selection.Font.Size = 9

【问题讨论】:

标签: vba excel ms-word


【解决方案1】:

如果您改写您的问题“在 Excel 应用程序上使用 VBA 移动 Word 文档上的光标位置”,您的问题就会消失。您不能使用 Excel 应用程序在 Word 文档中移动光标。

当您打开 Excel 工作簿时,您会加载 Excel 应用程序的一个实例。您可以使用同一实例打开多个工作簿。它还包含 Excel VBA 以及 Excel 应用程序的所有对象、方法和功能。此实例没有名称。

但您可以使用类似的代码创建 Excel 应用程序的另一个实例

Dim XlApp as Excel.Application
Set XlApp = New Excel.Application

您这样创建的新实例具有第一个实例的所有功能,但与它完全不同。您可以使用以下代码在其中打开工作簿

Dim Wb as workbook
Set Wb = XlApp.Workbooks.Add([Template])

现在,如果您设置了对 MS Word 对象库的引用,您可以使用类似的代码创建 Word 应用程序,例如,

Dim WdApp as Word.Application
Set WdApp = New Word.Application

这可能是您计算机上运行的唯一 MS Word 实例,也可能是在其他已运行实例之外创建的新实例。这个实例知道 MS Word 的所有对象和方法。

您可以在同一个 VBA 项目中控制 XlApp 和 WdApp 这两个实例,但您应该小心区分对象。例如,Excel 和 Word 都有一个 Range 对象。它们是非常不同的动物。例如,您可以指定

Dim xlRng As Excel.Range
Dim wdRng As Word.Range
Dim MyRng As Range

在本例中,如果您的 VBA 项目是 Excel 项目,MyRng 将是一个 Excel 范围。当您同时运行这两个应用程序时,这种默认设置会导致脱发。

Dim Wb As Workbook
Dim Doc As Document

不要引起类似的混淆,因为在 MS Word 中没有 Workbook 对象,在 MS Excel 中没有 Document 对象。如果可用,VBA 将自动使用正确的应用程序。

在操作WdRng 时,您将可以访问Word Range 对象的所有方法,包括Move,但没有Address 属性,例如XlRng 的属性。

处理两个Selection 对象是有问题的。您必须激活一个窗口或文档或工作簿,VBA 将通过查看在所选窗口中运行的应用程序来知道您指的是哪个Selection 对象。如果您指定文档/工作簿对象并使用WdRngXlRng 对象来处理您的数据,您将不会遇到这个问题。

【讨论】:

  • 你的最后一段有点误导:SelectionApplication 对象的属性,所以只要你限定它 - 例如xlApp.SelectionwdApp.Selection 应该没有混淆.
【解决方案2】:

正如您的代码所代表的那样,关键字“选择”是指 excel 中当前选定的单元格,而不是 Word 文档中的光标位置。并且 Excel 选择对象没有移动方法。使用 Range 而不是选择,您可能会更成功:您的示例代码转换为

With ActiveDocument

    With .Content.Find
        .Execute FindText:="*", ReplaceWith:="NEW*"
    End With


     with .Paragraphs(4).Range.Words(5).Font
         .Bold = false
         .name = "Arial"
          .size = 9
      end with
       With .Paragraphs(4).Range.Words(6)
         .Bold = false
         .name = "Arial"
          .size = 9
      end with
end with

【讨论】:

  • 缺少对 Word 应用程序对象的引用,所以真的像 With wdApp.ActiveDocument
【解决方案3】:
'Something Basic
'Session of word
'Existing document

Sub fromaWordDoc0()
   Dim wdApp As Word.Application
   Dim wdDoc As Word.Document

   Set wdApp = CreateObject("word.application")
   wdApp.Visible = True
   Set wdDoc = wdApp.Documents.Add("C:\Documents\words.docx")

   With wdApp.Selection
      wdApp.Selection.MoveRight Unit:=wdWord, Count:=4
   End With
   Set wdApp = Nothing: Set wdDoc = Nothing
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多