À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.