En temiz kodum değil, işim bitiyor.
ÇÖZÜM
Bu, bir metin dosyasından bir dizi anahtar / değer çiftini Word Belgesinin ActiveDocument.Variables listesine yükleyecektir . Bu Değişkenler Belge'de kalıcı olarak saklanır, ancak değişkenlerin çoğaltılmasını ve artık kullanılmasını önlemek için bunları ayırmayı seçtim (koddaki kızak çekici silme bölümüne bakın).
Değişken değerler daha sonra DOCVARIABLE lerine ada göre referans gösterilerek Belge Başındaki Alanlar kullanılarak görüntülenebilir .
Aşağıdaki kodda hata işleme yok, ancak çökmeyi önlemek için bazı temel ayrıştırma denetimleri var. Çok kapsamlı bir şekilde test edilmediyse de, kendi özeninizi gösterin.
KULLANIM:
Kod, Olay Açıldığında Belgesi işleyicisine yerleştirin. Word Belgesi ile aynı adı taşıyan ancak ".config" uzantılı bir dosya oluşturacaktır.
Yaratılışta. config dosyası, Doc'ı kopyalarsanız ve .config dosyasını unutursanız veya bilmezseniz, boş bir dosyayı yanlışlıkla açmamak için yazılmış olan tüm geçerli ActiveDocument.Variables dosyasına sahip olacaktır.
Eğer config dosyası varsa, tüm doc değişkenleri bellekten silinir ve config'dekiler belleğe yüklenir. Config dosyasındaki bir değişkenin değerini değiştirebilirsiniz; bir sonraki açışınızda belge boyunca güncellenecektir.

Option Explicit
Private Sub Document_Open()
'Dim
Dim i As Long
Dim Folder As String
Dim FileName As String
Dim FullPath As String
Dim FileText As String
Dim Item As Variant
Dim Table As Scripting.Dictionary
Dim Key As Variant
' Open or Create Config File
With New FileSystemObject
' Setup Path
Folder = 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