Portanto, essa solução é provavelmente muito específica e muito complicada para a maioria dos usuários, mas, no entanto, resolveu meu problema.
A primeira parte envolveu a adição de um marcador chamado "FileName", onde eu queria o meu identificador. A macro a seguir atualiza o marcador para o nome do arquivo quando o documento é aberto:
Private Sub Document_Open()
'
' Document_Open Macro
'
'
Application.OnTime (Now + TimeValue("00:00:02")), "ProcessActiveDocument"
End Sub
Sub ProcessActiveDocument()
Dim BmkNm As String, BmkRng As Range, FileName As String
BmkNm = "FileName"
FileName = ActiveDocument.Name
If InStrRev(FileName, ".") > 0 Then FileName = Left(FileName, InStrRev(FileName, ".") - 1)
If ActiveDocument.Bookmarks.Exists(BmkNm) Then
Set BmkRng = ActiveDocument.Bookmarks(BmkNm).Range
If BmkRng.Text = FileName Then Exit Sub
BmkRng.Text = FileName
ActiveDocument.Bookmarks.Add BmkNm, BmkRng
Else
MsgBox "Bookmark: " & BmkNm & " not found."
End If
Set BmkRng = Nothing
End Sub
É claro que a segurança de macro deve ser desativada adequadamente para que isso funcione.
A próxima parte foi um script Python para duplicar os arquivos e abrir cada um deles, acionando a macro.
import os
import shutil
ref_dir_base = "C:/SN"
word_doc = 'SN-'
word_ext = '.doc'
ref_num = 1
ref_str = str(1000+ref_num)[1:]
begin_num = 2
stop_num = 12
word_exec = '\"C:/Program Files (x86)/Microsoft Office/Office14/Winword.exe\"'
for i in range(begin_num, stop_num+1):
num_str = str(1000+i)[1:]
shutil.copytree(ref_dir_base+ref_str, ref_dir_base+num_str)
old_doc_name = word_doc + str(ref_num) + word_ext
new_doc_name = word_doc + str(i) + word_ext
new_path = ref_dir_base + num_str + os.altsep
os.rename(new_path + old_doc_name, new_path + new_doc_name)
for i in range(begin_num, stop_num+1):
num_str = str(1000+i)[1:]
new_doc_name = word_doc + str(i) + word_ext
new_path = ref_dir_base + num_str + os.altsep
exec_param = '\"'+new_path+new_doc_name + '\"'
exec_str = '\"'+word_exec+' '+exec_param +'\"'
os.startfile(exec_param)
O único problema com essa abordagem é que o documento do Word é deixado aberto e não salvo, portanto, exige que o usuário salve o documento para que as alterações entrem em vigor.