Se você tiver cabeçalhos por seção (desvinculados), em um sentido, tudo o que você precisa é de uma área com um texto de espaço reservado que o usuário possa substituir. Tradicionalmente, uma maneira de fazer isso é usar um campo {MACROBUTTON} como um espaço reservado, como este
{ MACROBUTTON Nomacro The placeholder text }
(Onde Nomacro é um nome de macro inexistente, anf o {} é um par de chaves de código de campo especial que você pode inserir usando ctrl-F9 no Windows Word)
Quando o usuário digita nesse campo, o campo e seu texto de espaço reservado são removidos.
Isso funciona nos cabeçalhos, bem como no corpo do documento. A principal desvantagem é, suponho, que, se o usuário excluir o texto, o espaço reservado não reapareça. Mas suspeito que outras coisas simples que o usuário poderia fazer (como adicionar ou excluir quebras de seção) podem ser mais propensas a quebrar o documento, qualquer que seja o método usado.
Se você quiser um único cabeçalho (ou seja, todos os cabeçalhos estão vinculados ao cabeçalho da Seção 1), a maneira tradicional de obter texto por seção em um cabeçalho é usar um campo {STYLEREF} que faça referência a um parágrafo ou área de texto com um estilo específico, geralmente no início ou próximo do início de cada seção.
A maioria das outras coisas parece mais complexa e provavelmente menos robusta do que provavelmente vale a pena. Por exemplo, você poderia inserir o valor de uma variável de documento ou propriedade de documento personalizada para cada seção usando um campo aninhado, como
{ DOCVARIABLE "header{ SECTION }" }
mas não haveria edições in-situ e você teria que usar o VBA para fornecer um mecanismo para o usuário modificar as variáveis do documento. Usando as propriedades personalizadas do documento, você pode pré-preencher um determinado número e usar
{ DOCPROPERTY "header{ SECTION }" }
e diga ao usuário como usar o editor de propriedade existente, mas isso não é simples.
Por fim, se a contagem de seções for fixa e você puder usar cabeçalhos desvinculados, poderá usar controles de conteúdo vinculados a um armazenamento de dados XML personalizado. Eles têm espaços reservados apropriados e são editáveis no local, mas novamente há a questão de como você classifica um documento que teve seções adicionadas / removidas. Abaixo está um exemplo de código para fazer a configuração inicial de um documento em branco com um número especificado de seções e um controle de conteúdo em cada cabeçalho. Isso só funcionaria no Windows Word 2007 e posterior.
Sub makeMappedCCPerSection()
' Run this with a newly created document
' Set this to the number of sections you want
Const sectioncount As Integer = 5
Dim cc As Word.ContentControl
Dim cxp As Office.CustomXMLPart
Dim cxpXML As String
Dim i As Integer
' the number of sections in your document
'Dim sectioncount As Integer
cxpXML = ""
cxpXML = cxpXML & "<root xmlns:hcc='header content control'>" & vbCrLf
cxpXML = cxpXML & "<sections>" & vbCrLf
For i = 1 To sectioncount
cxpXML = cxpXML & "<section/>" & vbCrLf
Next
cxpXML = cxpXML & "</sections>" & vbCrLf
cxpXML = cxpXML & "</root>" & vbCrLf
With ActiveDocument
For i = .CustomXMLParts.Count To 1 Step -1
With .CustomXMLParts(i)
If Not .BuiltIn Then
.Delete
End If
End With
Next
Set cxp = .CustomXMLParts.Add(cxpXML)
For i = 1 To sectioncount - 1
.Content.InsertBreak WdBreakType.wdSectionBreakNextPage
Next
For i = sectioncount To 1 Step -1
.Sections(i).Headers(wdHeaderFooterPrimary).Range.Text = " "
If i > 1 Then
.Sections(i).Headers(wdHeaderFooterPrimary).LinkToPrevious = False
End If
Set cc = .Sections(i).Headers(wdHeaderFooterPrimary).Range.ContentControls.Add(wdContentControlText)
cc.SetPlaceholderText Text:="Section " & CStr(i) & " placeholder"
cc.XMLMapping.SetMapping "/root/sections/section[" & CStr(i) & "]", , cxp
Set cxp = Nothing
Set cc = Nothing
Next
End With
End Sub