Excel VBA获取Word表数据

时间:2014-03-14 16:55:35

标签: excel excel-vba ms-word ms-office vba

ScreenShot of Problem

我找到了VBA代码并对其进行了修改,但它无效。

Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim i As Integer
Dim j As Integer
Dim TableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel

wdFileName = Application.GetOpenFilename()
j = 1

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

Set wdDoc = GetObject(wdFileName) 'open Word file

With wdDoc
For i = 1 To .Tables.Count
With .Tables(i)
'copy cell contents from Word table cells to Excel cells
For iRow = 2 To .Rows.Count
For iCol = 1 To .Columns.Count
Cells(j, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
j = j + 1
Next iRow
End With
Next i 'Next Table

End With 'End of the document

Set wdDoc = Nothing

End Sub

我有一个包含750页的Word文档,每页都有一个表格。我想将表的内容导入Excel文件(除了每个表的第一行,因为它是列名)。

抛出错误(如图所示) - 自动化错误 - “运行时错误2147418105(80010007)”。

1 个答案:

答案 0 :(得分:0)

从您的屏幕截图中,您看到第10行并在错误发生之前启动了第11行。如果没有看到完整的文档或知道表模式,我会尝试以下一种或多种方法:

  1. 尝试在单词崩溃之前设置断点,然后逐步查看特定数据或其他问题是否可能是罪魁祸首。 (在Row循环(For iRow = 2 To .Rows.Count)或添加IF iRow=10 THEN debug.break然后从那里进入每一行(Debug> Step Into(F8))。)。

  2. 如果表格在10行附近结束,请尝试关闭wdDoc(Set wdDoc = Nothing),重新打开,然后从中断处开始继续导入。这听起来不切实际,但如果它能解决这个问题,那么你可以尝试调整一些值并缩小根本原因。

  3. 在具有大量可用RAM的计算机上运行此VBA。 MS Word可能会将整个750页的文档加载到内存中,然后命中OutOfMemory,页面文件抖动或其他操作系统资源限制,这些限制会导致应用程序崩溃。

  4. 尝试将750页文档拆分为8个文件,每个文件不超过100页。然后遍历每个。如果可行,则查看计算机资源限制或Word大小限制问题。

  5. 仅供参考:我在~1000页上看到了Word稳定性方面的一些问题,但在该示例中我有很多屏幕截图和其他格式化的好东西(我找到了解决方案,将其分成27个单独的参考细节级别部分整体< 50页的顶级文档松散地引用它们。)

    一个已知的修补程序已经迟到了一年,但是这个调试清单可能会帮助您或其他偶然发现此问题的人:-)。我正在使用非常类似的例程(并且刚开始搜索如何为每个表提取统计数据:-))。干杯,祝你好运!