vba - 来自模板 Application.OrganizerCopy 的 VBA 复制样式不会更新 activedocument.styles(Style.NameLocal) 并列出本地样式
问题描述
我正在尝试拥有一组使用相同格式的 ms-Word 文档(来自文档模板)。
编辑:我使用 [@timothy-rylatt] 和 [@john-korchok] 建议的模板创建文档,但我仍在对模板中的样式进行更新。当我使用样式管理器时,我会看到许多内置样式。当我尝试更新使用模板的文档时,我会从模板vba
中复制命名样式列表。
我有两个问题:
当我使用样式管理器或
vba
以下样式复制样式时,目标文档中的样式不会更新(至少编号、边框、背景颜色等不会更新)If
我将逐个元素更新样式元素(右缩进,左缩进,编号基本样式,...Then
,我只想更新实际存储在目标文档中的样式。下面的第二部分vba
列出了样式,但是所有可见样式,而不仅仅是当前文档中的样式。
以单一样式复制的 VBA 代码
它不会更新在目标文档中使用该样式的实例。
Private Sub moveOneStyle(styleName As String, _
fromFile As String, _
toFile As String)
'
' moveOneStyle
' styleName: is the style to copy
' fromFile: is usually a word template file .dotx or .dotm
' (open the from file, and then use that fromDoc.FullName)
' toFile: is usually the Application.ActiveDocument.FullName
'
'
On Error GoTo record
Application.OrganizerCopy Source:=fromFile, _
Destination:=tof, _
name:=styleName, _
Object:=wdOrganizerObjectStyles
GoTo done
record:
Debug.Print styleName
done:
'On Error GoTo 0
End Sub
列出当前文档中样式的 VBA 代码
现在,我知道大多数情况下,这将用于检索当前文档、模板或内置(按此顺序)中的任何样式名称,但我不知道如何仅获取当前文档中的那些。请参阅下面的代码以获取here a miracle occurs
. 我在寻找奇迹。
Private Sub listAllStyles()
Dim d As Word.Document
Dim sty As Word.Style
Dim styName As Variant
Dim r As Word.Range
Dim Inuse As String
Application.ScreenUpdating = False
Set d = Application.ActiveDocument
Set r = d.Range()
r.Collapse wdCollapseEnd
On Error Resume Next
For Each sty In d.Styles
styName = sty.NameLocal
On Error GoTo StyError
' if sty. is from this document
' here a miracle occurs
If sty.Inuse Then Inuse = "True" Else Inuse = "False"
r.text = CStr(styName) + " inuse= " + Inuse + vbCrLf
r.Collapse wdCollapseEnd
GoTo StyNext
StyError:
Debug.Print styName
StyNext:
On Error GoTo 0
Next sty
Set d = Nothing
Set sty = Nothing
Set r = Nothing
Application.ScreenUpdating = True
End Sub
解决方案
使用 VBA
我找到了一种方法来做我想做的事,即从文档模板更新我的样式。
Private Sub linktemplate()
'
' linktemplate Macro
'
'
With ActiveDocument
.AttachedTemplate = _
"C:\Users\XXX\AppData\Roaming\Microsoft\Templates\projectTemplate.dotx"
.UpdateStylesOnOpen = False
.UpdateStylesOnOpen = True
.UpdateStylesOnOpen = False
End With
End Sub
我使用了 (false, true, false) 的顺序,因为样式会在 false -> 到 true 转换时更新。
注意 Bene (NB)这些步骤只会更新模板中正在使用的样式。
没有 VBA
现在,如果您想在没有 vba 的情况下执行此操作,请访问https://office-watch.com/2018/automatically-update-document-styles-in-microsoft-word/(Office Watch)
引用相关部分:
Microsoft Word 的深处是“自动更新文档 > 样式”选项。那有什么作用以及哪些文件受到影响?
“样式”和“自动”有几个措辞相似的选项,所以让我们明确一点……我们正在谈论文件 | 选项 | 加载项 | 管理 | 模板 | 去 | 模板和加载项 | 模板……我们确实在 Word 中说“深入”。
代替 Normal,您可以放置您的项目模板。当它说“自动更新文档样式”时,它的意思是从模板更新当前的文档样式。
选中更新框,然后取消选中它,否则文档将在您打开文档时不断更新(尽管这可能是您想要的)。
推荐阅读
- javascript - 如何使 bs4Dash 手风琴项目在 r 闪亮启动时扩展?
- excel - 带有数组参数的 SumIfs
- python - 为 flask_dynamo 项目设置 DYNAMO_TABLES 的语法无效
- c# - 第 2 代内存在我使用 dotMemory 在 .NET 中获得快照后立即清除
- javascript - 创建新文件夹 Google Drive API
- matlab - MATLAB 中的矩阵列表
- excel - 给出符合 VLOOKUP 标准的 3 个最大值旁边的单元格值的公式
- hadoop - Hadoop 短路读取失败:read(2) 错误:资源暂时不可用
- encryption - 如何将keepass中的AES密钥大小加倍?
- python - 排除 Beautifulsoup 中的图片链接