Controle o Excel a partir do Word usando VBA no Microsoft Excel 2010

Anonim

Às vezes, temos que copiar dados de um documento do Word para um arquivo do Excel. Podemos fazer isso facilmente com uma macro em todas as versões do Office. A macro abrirá um arquivo Excel existente / novo, copiará o conteúdo, salvará e fechará o arquivo. Vamos ver como isso é feito.

Opção Explícita


Sub OpenAndReadWordDoc ()
Dim tString As String
Dim p As Long, r As Long
Dim wrdApp As Object, wrdDoc As Object
Dim wb como pasta de trabalho
Dim trange como variante

Definir wb = Workbooks.Add
Com wb.Worksheets (1) .Range (“A1”)
.Value = “Conteúdo do documento do Word:”
.Font.Bold = True
.Font.Size = 14
.Offset (1,0) .Selecione
Terminar com

r = 3

Defina wrdApp = CreateObject (“Word.Application”)
wrdApp.Visible = True
Defina wrdDoc = wrdApp.Documents.Open (“B: \ Test \ MyNewWordDoc.docx”)

Com wrdDoc
Para p = 1 a .Paragraphs.Count
Defina trange = .Range (Start: =. Paragraphs (p) .Range.Start, _
Fim: =. Parágrafos (p) .Range.End)
tString = trange.Text
tString = Left (tString, Len (tString) -1)

Se Instr (1, tString, ”1”)> 0 Então
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r + 1
Fim se

Próximo p
.Fechar

Terminar com

wrdApp.Quit
Definir wrdDoc = Nada
Definir wrdApp = Nothing
wb.Saved = True

End Sub

Para copiar o código acima para o seu arquivo,

  • Pressione Alt + F11 no teclado
  • No lado esquerdo, você verá objetos do Microsoft Excel
  • Clique com o botão direito e selecione Inserir
  • Em seguida, clique em Módulo
  • Copie o código para a janela de código à direita

Agora vamos ver como esse código funciona -

Primeiro, declaramos as variáveis ​​de que precisamos -tstring como uma string para conter o texto (veremos qual texto mais tarde). 2 variáveis ​​“p” e “r” como contadores. Estes são do tipo “longo”. Então temos as 2 variáveis ​​de objeto wrdApp e wrdDoc. wrdApp é o objeto de aplicativo do Word e wrdDoc é o objeto de documento do Word. Wb é nossa variável de pasta de trabalho para a nova pasta de trabalho criada no código. Se você estiver abrindo uma pasta de trabalho existente, poderá atribuir essa variável a ela. A última variável é o tipo de variável de variante trange que terá o conteúdo que precisa ser transferido do Word doc para o arquivo Excel.

Definir wb = Workbooks.Add

Isso atribui a nova pasta de trabalho à variável wb. Se você não deseja adicionar uma nova pasta de trabalho, mas abrir uma pasta de trabalho existente, você pode alterar esta linha da seguinte forma -
Definir wb - Workbooks.Open (“B: \ Test \ File1.xlsx”)

Com wb.Worksheets (1) .Range (“A1”)
.Value = “Conteúdo do documento do Word:”
.Font.Bold = True
.Font.Size = 14
.Offset (1,0) .Selecione
Terminar com

O With wb.Worksheets (1) .range (“A1”) é uma maneira rápida de referenciá-lo. Portanto, você não precisa repeti-lo para cada uma das linhas de código entre as instruções With e End with.

Essas linhas de código são colocadas no texto “Conteúdo do documento do Word:” com uma fonte em negrito e tamanho de fonte 14 na célula A1 do 1st planilha na nova pasta de trabalho. E então .Offset (1,0) .Select seleciona a próxima linha.

r = 3

À variável “r” é atribuído o valor 3, pois esta é a linha inicial no arquivo Excel para os dados a serem copiados do documento do Word.

Defina wrdApp = CreateObject (“Word.Application”)

Se o Word já estiver sendo executado em seu sistema,CreateObjectirá criar uma nova instância do Word. Portanto, esta linha atribui a variável de objeto wrdApp ao aplicativo Word, que você pode usar posteriormente no código.

wrdApp.Visible = True

A instância recém-criada do Word não ficará visível quando for criada. Para torná-lo visível, você precisa definir wrdApp.Visible = True para que seja visível.

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

Criamos a nova instância do aplicativo do Word, mas ainda não abrimos um documento do Word de origem. Portanto, este comando irá abrir o documento do Word. O objeto wrdDoc foi atribuído a este documento para que possamos usá-lo posteriormente no código.

Com wrdDoc… .End With

Este é o nosso loop “With” que funcionará inteiramente com o objeto wrdDoc. Depois de abrir este loop, não é necessário repetir o texto “wrdDoc” novamente neste loop. Você pode começar diretamente com o ponto (“.”) Antes de qualquer objeto relacionado ao wrdDoc. Este loop termina com o Terminar com demonstração. Uma vez que a instrução End With foi inserida, você não pode se referir aos objetos após wrdDoc apenas com o “.”.

Para p = 1 a .Paragraphs.Count

Este é o loop “For” que fará um loop a partir do 1st aos últimos parágrafos no documento do Word. O arquivo de palavras que contém os dados tem 100 linhas de informação, cada uma armazenada como um parágrafo separado. O loop aumentará de 1 a 100 e copiará os parágrafos. Se certas condições forem definidas, o copiar e colar será baseado nessas condições.

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

Isso atribui o início e o fim de cada parágrafo ao intervalo conforme os incrementos do loop.

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

Primeiro, o texto de trange é passado para TString. Então, cada parágrafo tem um caractere de parágrafo no final da frase. Isso é removido usando a função Esquerda. Do lado esquerdo, todos os caracteres, exceto o último, são armazenados na variável tString.

Se Instr (1, tString, “1”)> 0 Então
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r + 1
Fim se

Esta função IF verifica se o texto em tString contém o número 1. Se for verdadeiro, ela copia o conteúdo de tString para a próxima linha disponível na pasta de trabalho. “R” primeiro tinha um valor de 3. Usando r = r + 1, incrementamos em 1, de modo que a próxima entrada possa ser colocada abaixo da entrada anterior.

Próximo p
.Fechar

o Próximo p linha de incrementos de código para o próximo parágrafo.

.Fechar fecha o documento uma vez que todos os parágrafos tenham sido trabalhados. Esta é a saída que obtemos no arquivo Excel -

Você verá que apenas os parágrafos que contêm o número 1 em qualquer lugar do número são incluídos na saída.

wrdApp.Quit
Definir wrdDoc = Nada
Definir wrdApp = Nothing
wb.Saved = True

wrdApp.Quit fechará a palavra Aplicativo. Definir wrdDoc = Nothing e Definir wrdApp = Nothing irá liberar a memória usada por essas 2 variáveis ​​de objeto e defini-las como Nothing. wb.Saved = True salvará a pasta de trabalho.

Com o código acima, podemos controlar quais dados serão copiados do arquivo do Word para o arquivo do Excel.