我已经打开了一个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”
所请求的集合成员不存在。
答案 0 :(得分:1)
此代码中有许多因素会导致或可能引起问题。
发生错误的原因是该代码正在Excel中运行,因此如果objWord
未用于Word语法,并且Word和Excel都使用相同的名称作为对象,则VBA将尝试使用Excel对象模型。在这种情况下,由于文件使用Word而不是Excel,因此使用objWord.Windows(Filename).Activate
应该避免出现此特定错误。
其他注意事项:
与Excel一样,在Word VBA中使用Active
,Activate
或Selection
是不可靠的,除非绝对必要,否则不应使用。最好直接使用应用程序的对象。因此,声明并实例化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>