Controle Excel desde Word usando VBA en Microsoft Excel 2010

Anonim

Hay ocasiones en las que tenemos que copiar datos de un documento de Word a un archivo de Excel. Podemos hacer esto muy fácilmente con una macro en todas las versiones de Office. La macro abrirá un archivo de Excel existente / nuevo, copiará el contenido y luego guardará y cerrará el archivo. Veamos cómo se hace esto.

Opción explícita


Sub OpenAndReadWordDoc ()
Dim tString como cadena
Dim p tan largo, r tan largo
Dim wrdApp como objeto, wrdDoc como objeto
Dim wb como libro de trabajo
Dim trange como variante

Establecer wb = Workbooks.Add
Con wb.Worksheets (1) .Range ("A1")
.Value = "Contenido del documento de Word:"
.Font.Bold = Verdadero
.Fuente.Tamaño = 14
.Desplazamiento (1,0) .Seleccionar
Terminar con

r = 3

Establecer wrdApp = CreateObject ("Word.Application")
wrdApp.Visible = Verdadero
Establezca wrdDoc = wrdApp.Documents.Open ("B: \ Test \ MyNewWordDoc.docx")

Con wrdDoc
Para p = 1 a .Paragraphs.Count
Establecer trange = .Range (Inicio: =. Párrafos (p) .Range.Start, _
Fin: =. Párrafos (p) .Rango.Fin)
tString = trange.Text
tString = Izquierda (tString, Len (tString) -1)

Si Instr (1, tString, ”1”)> 0 Entonces
wb.Worksheets (1) .Range ("A" & r) .Value = tString
r = r + 1
Terminara si

Siguiente p
.Cerrar

Terminar con

wrdApp.Quit
Establecer wrdDoc = Nada
Establecer wrdApp = Nada
wb.Saved = Verdadero

End Sub

Para copiar el código anterior a su archivo,

  • Presione Alt + F11 en el teclado
  • En el lado izquierdo, verá Objetos de Microsoft Excel
  • Haga clic derecho y seleccione Insertar
  • Luego haga clic en Módulo
  • Copie el código en la ventana de código a la derecha

Ahora veamos cómo funciona este código:

Primero declaramos las variables que necesitamos -tstring como una cadena para contener el texto (veremos qué texto más adelante). 2 variables “p” y “r” como contadores. Estos son del tipo "largo". Luego tenemos las 2 variables de objeto wrdApp y wrdDoc. wrdApp es el objeto de aplicación de Word y wrdDoc es el objeto de documento de Word. Wb es nuestra variable de libro de trabajo para el nuevo libro de trabajo que se crea en el código. Si está abriendo un libro de trabajo existente, puede asignarle esta variable en su lugar. La última variable es el tipo de variable trange variant que tendrá el contenido que debe transferirse de la palabra doc al archivo de Excel.

Establecer wb = Workbooks.Add

Esto asigna el nuevo libro a la variable wb. Si no desea agregar un nuevo libro de trabajo pero abrir un libro de trabajo existente, puede modificar esta línea de la siguiente manera:
Establecer wb - Workbooks.Open ("B: \ Test \ File1.xlsx")

Con wb.Worksheets (1) .Range ("A1")
.Value = "Contenido del documento de Word:"
.Font.Bold = Verdadero
.Fuente.Tamaño = 14
.Desplazamiento (1,0) .Seleccionar
Terminar con

El With wb.Worksheets (1) .range (“A1”) es una forma rápida de hacer referencia a él. Por lo tanto, no tiene que repetirlo para cada una de las líneas de código entre las declaraciones With y End with.

Estas líneas de código incluyen el texto "Contenido del documento de Word:" con una fuente en negrita y un tamaño de fuente 14 en la celda A1 del 1S t hoja de trabajo en el nuevo libro de trabajo. Y luego .Offset (1,0) .Select selecciona la siguiente fila.

r = 3

A la variable “r” se le asigna un valor 3 ya que esta es la fila inicial en el archivo de Excel para los datos que se copiarán del documento de Word.

Establecer wrdApp = CreateObject ("Word.Application")

Si Word ya se está ejecutando en su sistema,Crear objetocreará una nueva instancia de Word. Entonces, esta línea asigna la variable de objeto wrdApp a la aplicación de Word, que puede usar más adelante en el código.

wrdApp.Visible = Verdadero

La instancia recién creada de Word no estará visible cuando se cree. Para hacerlo visible, debe configurar wrdApp.Visible = True para que sea visible.

Establecer wrdDoc = wrdApp.Documents.Open ("B: \ Test \ MyNewWordDoc.docx")

Creamos la nueva instancia de la aplicación de Word, pero aún no hemos abierto un documento de Word de origen. Entonces este comando abrirá el documento de Word. El objeto wrdDoc ha sido asignado a este documento para que podamos usarlo más adelante en el código.

Con wrdDoc… .Terminar con

Este es nuestro ciclo "Con" que funcionará completamente con el objeto wrdDoc. Una vez que abra este bucle, no es necesario que vuelva a repetir el texto "wrdDoc" en este bucle. Puede comenzar directamente con el punto (“.”) Antes de cualquier objeto relacionado con wrdDoc. Este bucle termina con el Terminar con declaración. Una vez que se ha ingresado la instrucción End With, no puede hacer referencia a los objetos después de wrdDoc con solo el ".".

Para p = 1 a .Paragraphs.Count

Este es el bucle "For" que se repetirá desde el 1S t a los últimos párrafos del documento de Word. El archivo de Word que contiene los datos tiene 100 líneas de información, cada una almacenada como un párrafo separado. El bucle aumentará de 1 a 100 y copiará los párrafos. Si se establecen ciertas condiciones, el copiar y pegar se basará en esas condiciones.

Establecer trange = .Range (Start: =. Paragraphs (p) .Range.Start, End: =. Paragraphs (p) .Range.End)

Esto asigna el inicio y el final de cada párrafo al rango a medida que aumenta el bucle.

tString = trange.text
tString = Izquierda (tString, len (tString) -1)

Primero, el texto de trange se pasa a TString. Luego, cada párrafo tiene un carácter de párrafo al final de la oración. Esto se elimina mediante la función Izquierda. Desde el lado izquierdo, todos los caracteres excepto el último se almacenan en la variable tString.

Si Instr (1, tString, "1")> 0 Entonces
wb.Worksheets (1) .Range ("A" & r) .Value = tString
r = r + 1
Terminara si

Esta función SI comprueba si el texto en tString contiene el número 1. Si es verdadero, entonces copia el contenido de tString en la siguiente fila disponible en el libro de trabajo. “R” primero tenía un valor de 3. Usando r = r + 1, lo incrementamos en 1, de modo que la siguiente entrada se pueda colocar debajo de la entrada anterior.

Siguiente p
.Cerrar

los Siguiente p la línea de código se incrementa al siguiente párrafo.

.Cerrar cierra el documento una vez trabajados todos los párrafos. Esta es la salida que obtenemos en el archivo de Excel:

Verá que solo los párrafos que contienen el número 1 en cualquier lugar del número se incluyen en la salida.

wrdApp.Quit
Establecer wrdDoc = Nada
Establecer wrdApp = Nada
wb.Saved = Verdadero

wrdApp.Quit cerrará la palabra Aplicación. Establecer wrdDoc = Nothing y Set wrdApp = Nothing liberará la memoria tomada por estas 2 variables de objeto y las establecerá en Nothing. wb.Saved = True guardará el libro de trabajo.

Con el código anterior podemos controlar qué datos se copiarán del archivo de Word al archivo de Excel.