批量对word里的内容提取到EXCEL里,这里提供一串代码,需求有2个
1:在运行过程中WPS或Office 2016 都提示用户定义类型未定义,如图

2:此代码提取的内容较多,遇到内容多容易死掉,所以只提取少量内容,工卡号,标题,DRWING TABLE里的内容:包含图纸号和版本,提取到EXCEL里。
如

图,需要提取图片中标红内容,DRWING TABLE内容可能跨页。
Public Function PickFolder() As String
'FileDialogΪÎļþ¶Ô»°¿ò¶ÔÏ󣬿ÉÒÔÉèÖóɣ¬´ò¿ª¶Ô»°¿ò£¬Áí´æÎª¶Ô»°¿ò£¬Îļþѡȡ£¬Îļþ¼Ðѡȡ
Dim fd As FileDialog
Dim strPath As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker) 'msoFileDialogFolderPicker±íѡȡÎļþ¼ÐµÄÐÎʽ
fd.Title = "ÇëÑ¡ÔñÎļþ¼Ð"
fd.InitialFileName = ThisWorkbook.Path & "\"
'ÏÔʾ¶Ô»°¿ò£¬µ±Óû§µã»÷È·¶¨ºó£¬·µ»Ø-1
If fd.Show = -1 Then
strPath = fd.SelectedItems(1)
Else
strPath = ""
End If
Set fd = Nothing
PickFolder = strPath
End Function
Function PickFolder1() As String
Dim Sl As Object, Path As String
Dim Ar, I As Long
Set Sl = CreateObject("shell.application")
Set folder = Sl.BrowseForFolder(0, "ÇëÑ¡ÔñÎļþ¼Ð", 0, ThisWorkbook.Path & "\") '´ò¿ª¶Ô»°¿ò
If folder Is Nothing Then
Path = ""
Else
Path = folder.Items.Item.Path '»ñµÃÑ¡ÔñµÄ·¾¶
End If
Set Sl = Nothing
Set folder = Nothing
PickFolder1 = Path
End Function
Sub ReadFile()
'¹¤¾ß---ÒýÓã¬Ìí¼ÓMicrsoft Word 14.0 Object Library
'Set wd = CreateObject("word.application")
'Set dc = CreateObject("word.document")
'ÕâÑùµÄ¸ñʽ¸üºÃһЩ£¬µ«È±ÉÙÌáʾ£¬ÊìÁ·ÕßʹÓÃ
'Ñ¡ÔñÎļþ¼Ð£¬»òÖ±½Óд¶¼¿É
' dpath = PickFolder1()
' dpath = ThisWorkbook.Path & "\aaa"
dpath = PickFolder()
If dpath = "" Then Exit Sub
Dim wdapp As Word.Application
Dim wddocument As Word.Document
Set wdapp = New Word.Application
'wdapp.Visible = True
' Application.ScreenUpdating = False
'dir¿ÉÓÃÀ´ÅжÏÎļþÊÇ·ñ´æÔÚ£¬Ê¹ÓÃÁËͨÅä·û£¬doc£¬docx¶¼°üÀ¨ÁË£¬dirµÄƪ·ùºÜ¶àÇëÍøÂçËÑË÷²é¿´
FileName = Dir(dpath & "\*.doc*")
Dim temp As String
On Error Resume Next
Do While FileName <> ""
Set wddocument = wdapp.Documents.Open(dpath & "\" & FileName) '½«´ò¿ªµÄÎļþ¸³¸øwddocument
If wddocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Rows.Count = 2 Then
If Cells(Cells.Rows.Count, 1).End(xlUp).Row > 1 Then
r = Cells(Cells.Rows.Count, 1).End(xlUp).Row + 1
Else
r = 2
End If
If r = 2 Then Range("a" & r) = 1 Else Range("a" & r) = Range("a" & r - 1) + 1
Range("b" & r) = Left(FileName, InStr(FileName, ".") - 1)
Range("b" & r).Select
'¸ù¾Ý¿Í»§ÌîдµÄwordÎļþ¸ñʽ£¬°ÑÊý¾Ý´ÓwordÎļþµÄÏàÓ¦tableÖÐÈ¡³ö£¬¼Ç¼µ½Excel µÄÏàӦλÖÃ
'Range("c" & r) = Replace(wddocument.Tables(2).Cell(2, 2).Range.Text, Chr$(13) & Chr$(7), "")ÕâÑùдҲ¿ÉÒÔ£¬µÀÀíÒ»Ñù£¬Ö÷ÒªÊÇÈ¥µô¿ØÖÆ·û
Range("c" & r) = Trim(Replace(wddocument.Tables(2).Cell(2, 2).Range.Text, vbCr & "", ""))
Range("d" & r) = Trim(Replace(wddocument.Tables(2).Cell(2, 4).Range.Text, vbCr & "", ""))
Range("e" & r) = Trim(Replace(wddocument.Tables(2).Cell(5, 1).Range.Text, vbCr & "", ""))
Range("f" & r) = Trim(Replace(wddocument.Tables(2).Cell(5, 2).Range.Text, vbCr & "", ""))
Range("g" & r) = Trim(Replace(wddocument.Tables(2).Cell(5, 3).Range.Text, vbCr & "", ""))
Range("h" & r) = Trim(Replace(wddocument.Tables(2).Cell(5, 4).Range.Text, vbCr & "", ""))
Range("i" & r) = Trim(Replace(wddocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 2).Range.Text, vbCr & "", ""))
Range("j" & r) = Trim(Replace(wddocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 4).Range.Text, vbCr & "", ""))
Range("k" & r) = Trim(Replace(wddocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(2, 2).Range.Text, vbCr & "", ""))
Range("l" & r) = Trim(Replace(wddocument.Tables(1).Cell(2, 1).Range.Text, vbCr & "", ""))
Range("m" & r) = Trim(Replace(wddocument.Tables(1).Cell(2, 2).Range.Text, vbCr & "", ""))
Range("n" & r) = Trim(Replace(wddocument.Tables(1).Cell(2, 3).Range.Text, vbCr & "", ""))
Range("o" & r) = Trim(Replace(wddocument.Tables(1).Cell(4, 1).Range.Text, vbCr & "", ""))
Range("p" & r) = Trim(Replace(wddocument.Tables(1).Cell(4, 2).Range.Text, vbCr & "", ""))
Range("q" & r) = Trim(Replace(wddocument.Tables(1).Cell(4, 3).Range.Text, vbCr & "", ""))
Range("r" & r) = Trim(Replace(wddocument.Tables(1).Cell(4, 4).Range.Text, vbCr & "", ""))
Range("s" & r) = Trim(Replace(wddocument.Tables(4).Cell(2, 3).Range.Text, vbCr & "", ""))
Range("t" & r) = wddocument.Range.Information(wdNumberOfPagesInDocument)
Range("u" & r) = Trim(Replace(wddocument.Tables(3).Cell(2, 2).Range.Text, vbCr & "", ""))
Range("v" & r) = Trim(Replace(wddocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 1).Range.Text, vbCr & "", ""))
Else
If Sheet2.Cells(Sheet2.Cells.Rows.Count, 1).End(xlUp).Row > 1 Then
r = Sheet2.Cells(Sheet2.Cells.Rows.Count, 1).End(xlUp).Row + 1
Else
r = 2
End If
'If r = 2 Then Sheet2.Range("a" & r) = 1 Else Sheet2.Range("a" & r) = Sheet2.Range("a" & r - 1) + 1
'Sheet2.Range("b" & r) = FileName
'Sheet2.Range("c" & r) = Trim(Replace(wddocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(1, 3).Range.Text, vbCr & "", ""))
'Sheet2.Range("d" & r) = Trim(Replace(wddocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Tables(1).Cell(3, 3).Range.Text, vbCr & "", ""))
'Sheet2.Range("e" & r) = Trim(Replace(wddocument.Tables(1).Cell(1, 2).Range.Text, vbCr & "", ""))
'Sheet2.Range("f" & r) = Trim(Replace(wddocument.Tables(1).Cell(2, 2).Range.Text, vbCr & "", ""))
'Sheet2.Range("g" & r) = Trim(Replace(wddocument.Tables(1).Cell(3, 1).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("h" & r) = Trim(Replace(wddocument.Tables(1).Cell(3, 2).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("i" & r) = Trim(Replace(wddocument.Tables(1).Cell(4, 1).Range.Paragraphs(3).Range.Text, vbCr & "", "")) 'mod
'Sheet2.Range("j" & r) = Trim(Replace(wddocument.Tables(1).Cell(4, 2).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("k" & r) = Trim(Replace(wddocument.Tables(1).Cell(5, 3).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("l" & r) = Trim(Replace(wddocument.Tables(1).Cell(5, 4).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("m" & r) = Trim(Replace(wddocument.Tables(1).Cell(6, 1).Range.Paragraphs(2).Range.Text, "", "")) 'new
'Sheet2.Range("n" & r) = Trim(Replace(wddocument.Tables(1).Cell(7, 1).Range.Text, "", "")) 'new
'Sheet2.Range("o" & r) = Trim(Replace(wddocument.Tables(1).Cell(6, 2).Range.Paragraphs(2).Range.Text, "", "")) 'new
'Sheet2.Range("p" & r) = Trim(Replace(wddocument.Tables(1).Cell(7, 2).Range.Text, "", "")) 'new
'Sheet2.Range("q" & r) = Trim(Replace(wddocument.Tables(1).Cell(6, 3).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("r" & r) = Trim(Replace(wddocument.Tables(1).Cell(7, 3).Range.Text, "", "")) 'new
'Sheet2.Range("s" & r) = Trim(Replace(wddocument.Tables(2).Cell(2, 1).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("t" & r) = Trim(Replace(wddocument.Tables(2).Cell(2, 2).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("u" & r) = Trim(Replace(wddocument.Tables(2).Cell(2, 3).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("v" & r) = Trim(Replace(wddocument.Tables(2).Cell(3, 1).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("w" & r) = Trim(Replace(wddocument.Tables(2).Cell(3, 2).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("x" & r) = Trim(Replace(wddocument.Tables(2).Cell(3, 3).Range.Paragraphs(2).Range.Text, vbCr & "", ""))
'Sheet2.Range("y" & r) = Trim(Replace(wddocument.Tables(4).Cell(2, 1).Range.Text, vbCr & "", ""))
'Sheet2.Range("z" & r) = Trim(Replace(wddocument.Tables(4).Cell(4, 1).Range.Text, vbCr & "", ""))
'Sheet2.Range("aa" & r) = Trim(Replace(wddocument.Tables(4).Cell(6, 1).Range.Text, vbCr & "", ""))
'Sheet2.Range("ab" & r) = Trim(Replace(wddocument.Tables(4).Cell(8, 1).Range.Text, vbCr & "", ""))
'Sheet2.Range("ac" & r) = Trim(Replace(wddocument.Tables(4).Cell(10, 1).Range.Text, vbCr & "", ""))
'Sheet2.Range("ad" & r) = Trim(Replace(wddocument.Tables(5).Cell(2, 3).Range.Text, vbCr & "", ""))
End If
wddocument.Close
Set wddocument = Nothing
FileName = Dir() 'ÖØ¸´ÏÂÒ»¸öÎļþ£¬dirµÄƪ·ùºÜ¶àÇëÍøÂçËÑË÷²é¿´
Loop
'errH:
Set wddocument = Nothing
wdapp.Quit
Set wdapp = Nothing
Application.ScreenUpdating = True
End Sub
Sub kill()
For Each Process In GetObject("winmgmts:").ExecQuery("select * from Win32_Process where name='winword.EXE'")
Process.Terminate (0)
Next
End Sub