从Excel到Word的Selection.Goto

时间:2018-07-09 11:31:15

标签: excel vba excel-vba word-vba

我正在使用电子表格捕获测试用例,并在自动生成Word文档以呈现给业务的过程中。但是,我无法使用GoTo函数来处理文件。

所有子项均写入Excel VBA实例中。

以下是两个相关的子项:

Sub 1

Sub CreateTestDocument()
    Set wordapp = CreateObject("word.Application")
    Set Wordfile = wordapp.Documents.Open("S:\myPath\myFilename.dotm")
    wordapp.Visible = True
    AddNextCase ("FeatureCases")
End Sub

'Sub 2(从Sub 1调用)

Sub AddNextCase(Bmark As String)
    Wordfile.Activate
    Wordfile.SelectAllEditableRanges
    ActiveWindow.Selection.Goto What:=wdGoToBookmark, Name:=Bmark 'ERROR HERE
    Selection.TypeText "TEST1"
End Sub

Selection.Goto行中,出现以下错误:

  

运行时错误438:
  对象不支持此属性或方法

我尝试了各种不同的方法,但是在设置入口点以开始放置此文本块时,我总是遇到障碍,这是我所缺少的明显问题吗?

2 个答案:

答案 0 :(得分:3)

您需要确保解决了以下几件事:

确保在模块级别定义wordappwordfile对象。我已经使用来自Microsoft Word XX.X Object Library的对象类型引用在下面显示了这一点。这还将确保定义了您使用的所有单词常量。

然后,您需要使用wordapp上下文进行activewindow调用。这是通过wordapp.activewindow

完成的
Private wordapp     As Word.Application, _
        wordfile    As Word.Document

Sub CreateTestDocument()

Set wordapp = CreateObject("word.Application")
Set wordfile = wordapp.Documents.Open("FILE NAME")
wordapp.Visible = True
AddNextCase ("FeatureCases")

End Sub

Sub AddNextCase(Bmark As String)

wordfile.Activate
wordfile.SelectAllEditableRanges
wordapp.ActiveWindow.Selection.Goto What:=wdGoToBookmark, Name:=Bmark    
wordapp.Selection.TypeText "TEST1"

End Sub

答案 1 :(得分:-1)

按照MDN (改写)

  

.ActiveWindow是一个Application属性,它返回   活动窗口(Window Object)。

但是,您不能将方法应用于属性,而需要将其应用于Window Object。实现此目的的最简单方法是将窗口对象存储到变量中。

此外,您的变量(例如wordappWordfile可能是对象,因为您拥有Set,但是在代码中没有声明任何地方。

因此您的代码应如下所示:

Private Wordfile as Word.Document
Set Wordfile = CreateObject("word.Application")
Private word as Word.Application
Set word = wordapp.Documents.Open("S:\myPath\myFilename.dotm")
' ... rest of the code
wordapp.ActiveWindow.Selection.GoTo '... etc

总的来说,我建议您对对象进行一些研究,因为您似乎有一些学习空白(出于尊重的考虑)