O MS Word pode carregar dados dinâmicos (para títulos, autor, endereço, número de telefone, etc.) dos campos em um arquivo do Excel?

1

Eu não quero criar minha própria ferramenta no VBA, pois seria muito frágil codificar rapidamente (e passar para outros usuários) ou eu acabaria codificando muito para obter um resultado final tão simples .

Existe uma boa ferramenta interna para preencher algum tipo de formulário e preenchê-lo com o documento ?

Se os dados precisarem ser alterados, você pode ir até esse local central e editar nele, em vez de tentar encontrar todos os lugares mencionados no documento (como ter que entrar no Cabeçalho / Rodapé ou saber que o primeiro / últimas páginas têm uma configuração diferente de todas as outras, etc.)

Isto é para manuais onde o conteúdo, autor, nomes e títulos mudam de um projeto para outro, mas o formato segue o mesmo modelo.

    
por HodlDwon 29.09.2016 / 21:41

2 respostas

1

Para iniciar um formulário Modelo ou mala direta: o Word 2016


    Guia Mailings → Iniciar Mala → Passo a passo MM Wizard Escolha: Cartas, [Próximo] Escolha: Use o documento atual, [Próximo] Escolha: Digite uma nova lista →   CREATE →   personalizar colunas →   Adicionar / Excluir / Renomear

    Salvar: listas de endereços do Microsoft Office (* .mdb) - esta é a lista dinâmica para o formulário / modelo.

[Next] Escreva sua carta. Faça o seu modelo agora.

Agora, para inserir os "campos" dinâmicos:

    Guia Mailings → [Insert Merge Fields] Insira o "campo" em qualquer lugar onde a nova página será alterada de projeto para projeto.

É assim: imagem ( clique na imagem para ver / navegar animação GIF )

SuportedaMicrosoft-Word(maladireta): LINK Suporte técnico da Microsoft - Mala direta usando o Excel: LINK

    
por 30.09.2016 / 02:27
1

Não é o meu código mais limpo, mas faz o trabalho.

SOLUÇÃO

Isso carregará uma série de pares de valores-chave de um arquivo de texto no documento do Word lista ActiveDocument.Variables . Essas Variales são armazenadas persistentemente no Documento, mas eu escolhi separá-las para evitar duplicação e orfandade de variáveis (veja exclusão de marretas no código).

Os valores das variáveis podem ser exibido usando Fields em todo o documento, fazendo referência ao DOCVARIABLE s pelo nome.

O código abaixo não tem tratamento de erros, mas faz algumas verificações básicas de análise para evitar falhas. Não testado muito extensivamente, o mesmo acontece com a sua própria diligência.

USO:

Coloque o código no manipulador Document On Open Event. Ele criará um arquivo com o mesmo nome do documento do Word, mas com uma extensão ".config".

Na criação. o arquivo de configuração terá todas as ActiveDocument.Variables atuais escritas nele para garantir que você não abra um arquivo em branco acidentalmente se copiar o Doc e esquecer ou não tiver conhecimento do arquivo .config.

Se o arquivo de configuração existir, todas as variáveis doc serão excluídas da memória e aquelas na configuração serão carregadas na memória. Você pode alterar o valor de uma variável no arquivo de configuração e ela será atualizada em todo o documento na próxima vez que for aberta.

OptionExplicitPrivateSubDocument_Open()'DimDimiAsLongDimFolderAsStringDimFileNameAsStringDimFullPathAsStringDimFileTextAsStringDimItemAsVariantDimTableAsScripting.DictionaryDimKeyAsVariant'OpenorCreateConfigFileWithNewFileSystemObject'SetupPathFolder=ThisDocument.Path&"\"
        FileName = .GetBaseName(ThisDocument.Name)
        FullPath = Folder & FileName & ".config"

        If (.FileExists(FullPath)) Then

            ' Sledge Hammer Cleanup of Document Vars, avoids memory bloat by synchronizing variables with .config file
            For i = ActiveDocument.Variables.Count() To 1 Step -1
                ActiveDocument.Variables.Item(i).Delete
            Next i

            ' Open / Read
            With .OpenTextFile(FullPath, ForReading, False)

                ' Get File Contents
                If Not (.AtEndOfStream) Then
                    FileText = .ReadAll
                End If

                .Close
            End With
        Else

            ' Create / Write
            With .OpenTextFile(FullPath, ForWriting, True)

                ' Write One Key-Value pair per line
                For Each Item In ActiveDocument.Variables
                    .WriteLine (Item.Name & ":=" & Item.Value)
                Next

                .Close
            End With
        End If
    End With

    ' Parse Config Text for Runtime
    Set Table = ParseVariables(FileText)
    For Each Key In Table.Keys
        ActiveDocument.Variables(Key) = Table(Key)
    Next

    ' Update All Fields in Document
    ActiveDocument.Fields.Update

    ' Save File so user does not get nuisance prompts
    ActiveDocument.Save
End Sub


Private Function ParseVariables(text As String) As Scripting.Dictionary

' Dim
Dim i, n As Long
Dim Lines As Variant: Lines = Split(text, vbCrLf)
Dim VarTable As New Scripting.Dictionary
Dim Key, Value As String

    ' Loop
    For i = LBound(Lines) To UBound(Lines)

        Debug.Print ("Lines(" & i & ") = " & Lines(i))

        ' Find the ":=" delimiter in each line that splits the variable name from its value
        n = InStr(1, Lines(i), ":=", vbBinaryCompare)

        ' Escape if not delimited
        If (n > 0) Then

            ' Extract Key before ":=" and Value from after ":="
            Value = Mid(Lines(i), n + 2)
            Key = Trim(Mid(Lines(i), 1, Len(Lines(i)) - Len(Value) - 2))

            ' Escape if either Key or Value are empty
            If (Len(Key) > 0) And (Len(Value) > 0) Then
                VarTable.Item(Key) = Value
            End If
        End If
    Next i

    ' Return
    Set ParseVariables = VarTable

End Function
    
por 30.09.2016 / 23:49