Так что это решение, вероятно, слишком специфично и слишком сложно для большинства пользователей, но тем не менее оно решило мою проблему.
Первая часть включала добавление Закладки с именем «FileName», где я хотел получить свой идентификатор. Следующий макрос обновляет Закладку до имени файла при открытии документа:
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
Конечно, безопасность макросов должна быть правильно отключена, чтобы это работало.
Следующая часть была скриптом Python для дублирования файлов и открытия каждого запускающего макроса.
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)
Единственная проблема этого подхода заключается в том, что документ Word остается открытым и несохраненным, поэтому пользователю необходимо сохранить документ, чтобы изменения вступили в силу.