Word table 导入到 Excel 类型不匹配

Word table import into Excel type mismatch

我有下面的宏,可以在 Word 表格中添加一列,并将每个单元格中的值粘贴到最后一行。它 运行 在 Word 中非常完美,但是当 运行 在 Excel 宏中时,它会正确添加新列,但随后会给出范围(tblA、tblB、tblC)的类型不匹配错误.有人可以帮助识别错误吗?非常感谢!

Sub AddTeamColumn()

Dim WordApp As Object, WordDoc As Object
Dim arrFileList As Variant, Filename As Variant
Dim tblA As Range, tblB As Range, tblC As Range

'On Error Resume Next

arrFileList = Application.GetOpenFilename("Word files (*.doc; *.docx),*.doc;*.docx", 2, _
                                          "Select files", , True)

If Not IsArray(arrFileList) Then Exit Sub

Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True

For Each Filename In arrFileList

    Set WordDoc = WordApp.Documents.Open(Filename, ReadOnly:=False)
    
            WordDoc.Tables(3).Columns.Add
            WordDoc.Tables(4).Columns.Add
            WordDoc.Tables(5).Columns.Add
            
            Set tblA = WordDoc.Range(Start:=WordDoc.Tables(3).Cell(2, 8).Range.Start, _
                     End:=WordDoc.Tables(3).Rows.Last.Range.End)

            Set tblB = WordDoc.Range(Start:=WordDoc.Tables(4).Cell(2, 9).Range.Start, _
                     End:=WordDoc.Tables(4).Rows.Last.Range.End)

            Set tblC = WordDoc.Range(Start:=WordDoc.Tables(5).Cell(2, 5).Range.Start, _
                     End:=WordDoc.Tables(5).Rows.Last.Range.End)
                            
            WordDoc.Tables(1).Cell(1, 1).Select
            Selection.Copy
            'tblA.PasteSpecial DataType:=wdPasteText 'Word
            tblA.PasteSpecial xlPasteValues 'Excel
            
            WordDoc.Tables(1).Cell(1, 1).Select
            Selection.Copy
            'tblB.PasteSpecial DataType:=wdPasteText 'Word
            tblA.PasteSpecial xlPasteValues 'Excel
            
            WordDoc.Tables(1).Cell(1, 1).Select
            Selection.Copy
            'tblC.PasteSpecial DataType:=wdPasteText 'Word
            tblC.PasteSpecial xlPasteValues 'Excel

        WordDoc.Save

Next Filename

WordApp.Quit

Set WordDoc = Nothing
Set WordApp = Nothing

End Sub

当 运行 来自 Excel 时,您必须将 tbl-Ranges 明确定义为 Word.Range - 否则他们期望 Excel-Ranges (因此类型不匹配) -或者如果你想保留后期绑定,请使用对象。

如果您可以使用早期绑定,那么您必须添加 Microsoft Word 作为对您的 VBA 项目的引用。

'early binding
Dim tblA As Word.Range, tblB As Word.Range, tblC As Word.Range
'late binding
Dim tblA As object, tblB As object, tblC As object

与选择相同:您必须使用 wordapp.Selection 否则将引用 Excel 选择。