如何打开文件,然后在VBA(Microsoft Word)中激活该窗口?

时间:2018-12-21 18:17:30

标签: vba ms-word

我已经打开了一个Word文档(“ Template1”)。我试图编写VBA代码以打开Word文档文件(“ FileWithData”),并将信息从“ FileWithData”复制到“ Template1”。 “ FileWithData”可以是任何文件,这就是我使用OpenDialog的原因。

一切正常,但是在激活“ FileWithData”窗口以启动“复制和粘贴”过程时,我陷入了困境。

Dim intChoice As Integer
Dim strPath As String
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'if the user selects a file
If intChoice <> 0 Then
'get the path selected
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
'opens the document
objWord.Documents.Open (strPath)


 FileName = objWord.ActiveDocument.Name


,它在这里中断了:(

Windows(FileName).Activate
Selection.GoTo What:=wdGoToBookmark, Name:="Page1"
With ActiveDocument.Bookmarks
    .DefaultSorting = wdSortByName
    .ShowHidden = True
End With
Selection.Copy

Windows("Template1").Activate
Selection.GoTo What:=wdGoToBookmark, Name:="Page1"
With ActiveDocument.Bookmarks
    .DefaultSorting = wdSortByName
    .ShowHidden = True
End With
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Selection.MoveLeft Unit:=wdCharacter, Count:=2

我收到以下错误: 运行时错误“ 5941”

所请求的集合成员不存在。

2 个答案:

答案 0 :(得分:1)

此代码中有许多因素会导致或可能引起问题。

发生错误的原因是该代码正在Excel中运行,因此如果objWord未用于Word语法,并且Word和Excel都使用相同的名称作为对象,则VBA将尝试使用Excel对象模型。在这种情况下,由于文件使用Word而不是Excel,因此使用objWord.Windows(Filename).Activate应该避免出现此特定错误。

其他注意事项:

与Excel一样,在Word VBA中使用ActiveActivateSelection是不可靠的,除非绝对必要,否则不应使用。最好直接使用应用程序的对象。因此,声明并实例化Word文档的变量,并使用它代替ActiveDocument

Dim objDoc as Object 'Word.Document
Set objDoc = objWord.Documents.Open(strPath)

FileName = objDoc.Name

不确定您是否真的需要激活此窗口。不需要通过VBA处理文档的内容。如果是为了将其显示给用户进行编辑,则一定要这样做。我可能要等到代码末尾,但这将是个人喜好...在任何情况下,都可以专门处理文档的窗口,而不是让VBA搜索它:

objDoc.Windows(1).Activate

为了将格式化的内容从任何文档中的一个位置(Range)传输到同一文档或另一个文档中的另一个位置(Range),可以使用书签在一个步骤中完成操作,而无需任何操作选择或激活:

objDoc.Bookmarks("Page1").Range.FormattedText = _
       objWord.Documents("Template1").Bookmarks("Page1").Range.FormattedText

答案 1 :(得分:0)

听起来您想将Word文档中的数据复制到Excel中。那正确吗?下面的代码将为您完成此操作。只需更改要引用的Word文件的路径,并根据需要更改范围。

<div class="form-group">
    <label for="location">Location</label>
    <select name="location" id="location-form" required>
       <option value="">Choose Location</option>
       <?php foreach($location as $row) : ?>
       <option value="<?=$row['location_id']?>"><?=$row['location_name']?></option>
       <?php endforeach; ?>
    </select>
</div>