2016-12-12 8 views
-1

Я пытаюсь скопировать несколько таблиц из Microsoft Word Doc в Excel. Код не может найти какие-либо таблицы в документе слова, который, по моему мнению, обусловлен тем, что таблицы расположены рядом с центром страницы каждого документа, а не рядом с ним. Кто-нибудь знает, как я могу изменить код, чтобы успешно копировать таблицы?Копирование таблиц из Word в Excel-VBA

Я попытался использовать для петель вместо tableNo = wdDoc.Tables.Count, но не имел успеха.

Код, который я пробовал, относится к предыдущему потоку, который был успешным, когда таблицы расположены вблизи верхней части каждой страницы документа слова.

https://stackoverflow.com/a/9406983/7282657

+0

Вы уверены, что они на самом деле таблицы в документе? Если вы нажмете на один, он активирует вкладки «Инструменты таблицы»? –

+0

Да 100% уверены, что есть столы. Если я перетаскиваю таблицы ближе к верхней части страницы в слове, тогда код работает отлично. Спасибо Вам за Ваш вопрос. – smurf

+0

Звучит странно, но вряд ли мы можем предложить без образца «проблемного» документа для работы. –

ответ

0

Это работает для меня с образцом документа. Скорее всего, там могут быть и другие ситуации, в которых он мог бы не работа ...

Sub ImportWordTable() 

    Dim wdDoc As Object 
    Dim wdFileName As Variant 
    Dim tableNo As Integer 'table number in Word 
    Dim iRow As Long 'row index in Excel 
    Dim iCol As Integer 'column index in Excel 
    Dim resultRow As Long 
    Dim tableStart As Integer 
    Dim tableTot As Integer 
    Dim allTables As Collection '<< 

    On Error Resume Next 

    ActiveSheet.Range("A:AZ").ClearContents 

    wdFileName = Application.GetOpenFilename("Word files (*.doc),*.doc", , _ 
    "Browse for file containing table to be imported") 

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

    Set wdDoc = GetObject(wdFileName) 'open Word file 

    Set allTables = GetTables(wdDoc) '<<< see function below 

    tableNo = allTables.Count 
    tableTot = allTables.Count 
    If tableNo = 0 Then 
     MsgBox "This document contains no tables", _ 
     vbExclamation, "Import Word Table" 
    ElseIf tableNo > 1 Then 
     tableNo = InputBox("This Word document contains " & tableNo & " tables." & vbCrLf & _ 
     "Enter the table to start from", "Import Word Table", "1") 
    End If 

    resultRow = 4 

    For tableStart = 1 To tableTot 
     With allTables(tableStart) 
      'copy cell contents from Word table cells to Excel cells 
      For iRow = 1 To .Rows.Count 
       For iCol = 1 To .Columns.Count 
        Cells(resultRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text) 
       Next iCol 
       resultRow = resultRow + 1 
      Next iRow 
     End With 
     resultRow = resultRow + 1 
    Next tableStart 


End Sub 

'extract all tables from Word doc into a collection 
Function GetTables(doc As Object) As Collection 

    Dim shp As Object, i, tbls As Object 
    Dim tbl As Object 
    Dim rv As New Collection 

    'find tables directly in document 
    For Each tbl In doc.Tables 
     rv.Add tbl 
    Next tbl 

    'find tables hosted in shapes 
    For i = 1 To doc.Shapes.Count 
     On Error Resume Next 
     Set tbls = doc.Shapes(i).TextFrame.TextRange.Tables 
     On Error GoTo 0 
     If Not tbls Is Nothing Then 
      For Each tbl In tbls 
       rv.Add tbl 
      Next tbl 
     End If 
    Next i 

    Set GetTables = rv 

End Function 
+0

Это сработало отлично! Огромное спасибо. – smurf

Смежные вопросы