none
Selecionar e formatar trechos específicos de um Documento Word RRS feed

  • Pergunta

  • Boa tarde,

    Existe um documento Word enorme, com dezenas de páginas de tabelas e textos intercalados.

    Com VBA como é possível:

    - Selecionar e formatar apenas as tabelas dentro do Documento Word; (uma ação)
    - Selecionar e formatar apenas o que não for tabela; (outra ação)
    - Aplicar as funções acima em uma pasta com centenas de documentos semelhantes.

    Pensei no objeto Tables para selecionar todas tabelas, mas não entendo como usá-lo efetivamente.

    Quanto a selecionar tudo o que não é tabela, pensei que a solução seja algo tipo selecionar todas tabelas e depois inverter a seleção, se é possível fazer algo assim...

    A terceira função (aplicar aos documentos numa pasta) é a mais nebulosa para mim...

    quarta-feira, 18 de novembro de 2020 21:03

Todas as Respostas

  • Para percorrer arquivos de uma pasta, pesquise no Google por VBA percorrer arquivos.

    Para a formatação, grave uma macro fazendo o que deseja.

    O vídeo a seguir tem uma parte de gravação de macro:

    https://youtu.be/THVdxXL-IFE

    Qualquer dúvida adicional, só mesmo pesquisando e estudando na raça, pois Word VBA é um campo que quase ninguém atua.


    A melhor forma de agradecer e votar como util e / ou marcar como resposta. Anderson Diniz diniabr2011@gmail.com


    quinta-feira, 19 de novembro de 2020 13:32
  • Supondo que seus documentos estejam na pasta "PastaDocs" em seu Desktop, tente adaptar o código abaixo às suas necessidades:

    Sub FormataDocs()
      '----Carrega os nomes dos arquivos Word numa matriz---
      Dim Caminho As String, NomeDoc As String, NomesDocs() As String, i As Long
      Caminho = Environ("USERPROFILE") & "\Desktop\PastaDocs\"
      ChDrive Caminho: ChDir Caminho
      NomeDoc = Dir(Caminho & "*.docx")
      Do While NomeDoc <> vbNullString
        i = i + 1
        ReDim Preserve NomesDocs(1 To i)
        NomesDocs(i) = NomeDoc
        NomeDoc = Dir
      Loop
      '----Abre cada documento e... ---
      Dim doc As Document, t As Table, p As Paragraph
      Application.ScreenUpdating = False
        For i = 1 To UBound(NomesDocs)
          Set doc = Documents.Open(FileName:=NomesDocs(i), Visible:=False)
          '...Opção 1: Loop em todos os parágrafos. Se estiver dentro de uma tabela,
          'muda a fonte para Arial, senão muda a fonte para Calibri
          For Each p In doc.Paragraphs
            If p.Range.Information(wdWithInTable) Then
              p.Range.Font.Name = "Arial"
            Else
              p.Range.Font.Name = "Calibri"
            End If
          Next p
          '...Opção 2: Altera a fonte do documento inteiro para Calibri depois faz loop em cada
          'tabela e altera a fonte de seu texto inteiro para Arial (mais rápido).
          doc.Content.Font.Name = "Calibri"
          For Each t In doc.Tables
            t.Range.Font.Name = "Arial"
          Next t
          doc.Close SaveChanges:=True
        Next i
      Application.ScreenUpdating = True
    End Sub

    sábado, 21 de novembro de 2020 23:31