将 Word 表单数据提取到 Excel 工作簿时出现 OLE 和/或运行时 438 错误



这个脚本运行得很好...直到它没有。我有一个 Excel 工作簿与 Word 表单的多个副本位于同一文件夹中。宏应从每个窗体中提取数据,并将其复制到工作簿中的行。我现在收到"OLE Excel 正在等待另一个应用程序"错误或运行时 438 错误。我使用的宏如下:

Sub GetFormData()
Application.ScreenUpdating = False
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
Dim CCtrl As Word.ContentControl
Dim strFolder As String, strFile As String
Dim WkSht As Worksheet, i As Long, j As Long
strFolder = GetFolder
If strFolder = "" Then Exit Sub
Set WkSht = ActiveSheet
i = WkSht.Cells(WkSht.Rows.Count, 1).End(xlUp).Row
strFile = Dir(strFolder & "*.docm", vbNormal)
While strFile <> ""
i = i + 1
Set wdDoc = wdApp.Documents.Open(Filename:=strFolder & "" & strFile,   AddToRecentFiles:=False, Visible:=False)
With wdDoc
j = 0
For Each CCtrl In .ContentControls
j = j + 1
WkSht.Cells(i, j).FormulaLocal = CCtrl.Range.Text
Next
End With
wdDoc.Close SaveChanges:=False
strFile = Dir()
Wend
wdApp.Quit
Set wdDoc = Nothing: Set wdApp = Nothing: Set WkSht = Nothing
Application.ScreenUpdating = True
End Sub
Function GetFolder() As String
Dim oFolder As Object
GetFolder = ""
Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0)
If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path
Set oFolder = Nothing
End Function

问题似乎始于"设置 wdDoc = wdApp...">

我在这方面有点菜鸟。因此,我感谢您的帮助。 马 特。

我看到两个可能的问题,第一个几乎可以肯定导致错误; 第二个可能导致此错误(但可能不适用于 VBA(:

  1. 在同一行中声明和实例化 Word 应用程序:

    将 wdApp 调暗为新 Word.Application

你不应该这样做。相反:

Dim wdApp As Word.Application
Set wdApp = New Word.Application

我不记得有关"为什么"的确切细节,但这与立即创建的 Word.Application 对象有关,并且无法再使用Set wdApp = Nothing控制它。

  1. 正确,"外部"应用程序的所有对象都应按其创建的相反顺序释放。您已经声明了一个Word.ContentControl类型的对象,但不要释放它:

    设置 设置 CCtrl = 无 : 设置 wdDoc = 无: 设置wdApp = 无: 设置 wkSht = 无

最新更新