在没有激活它的情况下处理Word文档

时间:2018-03-20 11:08:34

标签: object window word-vba

目前我正在处理 Rough.docx ,我选择了一些文本,并在名为 Ticker Graveyard.Docx 的另一个文件中找到所选文本(已打开)。一切顺利,但有一个转折点。我需要在不使用Windows().Activate激活“Ticker Graveyard.Docx”的情况下默默地完成所有工作。

Sub Ticker_Finder_Updated_2()

Dim SD As String
Dim NAME As String
Dim TICKER As String
    SD = Trim(selection.Text)

    Windows("Ticker Graveyard").Activate '''''''''''''
    selection.Find.ClearFormatting
    With selection.Find
        .Text = SD
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = False
        .MatchWholeWord = True
      End With
    selection.Find.Execute
    If selection.Find.Found Then
        If selection.Font.Bold = True Then
        selection.MoveRight Unit:=wdCell
        TICKER = selection.Text
        selection.MoveLeft Unit:=wdCell
        NAME = selection.Text
        Else
        selection.MoveLeft Unit:=wdCell
        NAME = selection.Text
        selection.MoveRight Unit:=wdCell
        TICKER = selection.Text
        End If
        selection.HomeKey Unit:=wdStory
        Windows("Rough").Activate

        With selection
        .Font.Size = 9
        .TypeText (TICKER)
        .Delete Unit:=wdCharacter, COUNT:=1
        .HomeKey Unit:=wdLine
        .MoveUp Unit:=wdLine, COUNT:=1
        .Font.Size = 9
        .TypeText (NAME)
        .HomeKey Unit:=wdLine
        .Font.Size = 9
        .Font.Bold = True
        .TypeText Text:="{END}{COMPANY NEWS}"
        .MoveUp Unit:=wdParagraph, COUNT:=1, Extend:=wdExtend
        End With

    Else
    Windows("Rough").Activate
    selection.MoveRight Unit:=wdCharacter, COUNT:=1
    End If
End Sub

可以在不创建任何WordObject的情况下完成吗?善意的帮助。这样做的任何其他方法都会受到赞赏。

Ticker Graveyard :在一个表格中有'公司名称'和他们的'代码',这样当我在Rough文件中只有公司名称时,我可以抓住它的代码。 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以在没有Window.Activate的情况下轻松完成,但要使用这种代码(" interop"),您需要一个Word.Document对象。如果您要操作第二个文档的WordOpenXML,则可以在已关闭的文件上执行该操作。但是,Word-VBA没有用于处理Office Open XML zip包的内置工具。这是有可能的,但讨论超出了StackOverflow Q& A。

由于您在word-vba标记中发布此内容,我将向您展示如何使用第二个文件"默默地" - 不激活运行第二个文档的窗口。

要使用范围在表格单元格之间移动,您可以使用也识别MoveStart的{​​{1}}和MoveEnd方法。由于您只想在范围位于表格中时获取信息,因此我向Unit:=wdCell添加了对该信息的检查。

假设Bold只能在一列中,则不需要移动两个方向。您获得了第一位信息,它们移动到相邻的单元格以获得第二位。

在查询某个单元格If时,您将会随文本一起拾取单元格的内部结构。这附加了Chr(13)& Chr(7)到字符串。有各种方法可以解决这个问题 - 我将其中一个放在一个修剪字符并返回字符串的小函数中。

Range.Text