varias una reportes para macro hojas hoja historial hacer guardar generar extraer datos como carpeta excel vba ms-word export word-vba

una - macro para guardar varias hojas de excel en pdf



Macro para exportar tablas de MS Word a hojas de Excel (4)

Tengo un documento de Word con muchas tablas. ¿Alguien sabe cómo escribir una macro para exportar tales tablas a diferentes hojas de Excel?


Esta sección de código es la que recorre cada tabla y la copia para sobresalir. Tal vez podría crear un objeto de hoja de cálculo que actualice dinámicamente la hoja de cálculo a la que se refiere usando el número de tabla como contador.

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


Me encanta, esto es absolutamente genial, Damon (incluso si me llevó más de un año encontrarlo ...). Aquí está mi código final con una adición al ciclo de todas las tablas (comenzando desde la tabla elegida):

Option Explicit 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 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 With wdDoc tableNo = wdDoc.tables.Count tableTot = wdDoc.tables.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 .tables(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 With End Sub

Siguiente truco: averiguar cómo extraer una tabla dentro de una tabla desde Word ... ¿y realmente quiero hacerlo?

TC


Respuesta tomada de: http://www.mrexcel.com/forum/showthread.php?t=36875

Aquí hay un código que lee una tabla de Word en la hoja de cálculo activa de Excel. Le solicita el documento de Word y el número de tabla si Word contiene más de una tabla.

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 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 With wdDoc TableNo = wdDoc.tables.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 table number of table to import", "Import Word Table", "1") End If With .tables(TableNo) ''copy cell contents from Word table cells to Excel cells For iRow = 1 To .Rows.Count For iCol = 1 To .Columns.Count Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text) Next iCol Next iRow End With End With Set wdDoc = Nothing End Sub

Esta macro debe insertarse en Excel (no en Word) y colocarse en un módulo de macro estándar en lugar de en los módulos de código de evento de la hoja de trabajo o del libro. Para hacerlo, vaya al VBA (teclado Alt-TMV), inserte un módulo de macro (Alt-IM) y pegue el código en el panel de códigos. Ejecute la macro desde la interfaz de Excel como lo haría con cualquier otro (Alt-TMM).

Si su documento contiene muchas tablas, como sería el caso si su tabla de más de 100 páginas es en realidad una tabla separada en cada página, este código podría modificarse fácilmente para leer todas las tablas. Pero por ahora espero que sea una sola tabla continua y no requiera ninguna modificación.

Sigue sobresaliendo

Damon

VBAexpert Excel Consulting (Mi otra vida: http://damonostrander.com )


Muchas gracias Damon y @Tim

Lo modifiqué para abrir archivos docx, moví una línea clara de la hoja de trabajo después de verificar si el usuario escapaba.

Aquí está el código final:

Option Explicit 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 On Error Resume Next wdFileName = Application.GetOpenFilename("Word files (*.docx),*.docx", , _ "Browse for file containing table to be imported") If wdFileName = False Then Exit Sub ''(user cancelled import file browser) ActiveSheet.Range("A:AZ").ClearContents Set wdDoc = GetObject(wdFileName) ''open Word file With wdDoc tableNo = wdDoc.tables.Count tableTot = wdDoc.tables.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 = tableNo To tableTot With .tables(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 With End Sub