目前我正在处理 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文件中只有公司名称时,我可以抓住它的代码。
答案 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