Word 2016中如何让编辑框(EditBox)在关闭并重新打开后保留上次使用的值?
我来帮你搞定这个问题!你遇到的是Word宏里配置值没法保存的典型情况——当前的onLoad宏每次启动Word都会把字号硬设为14,自然记住不了上次输入的值。针对Word环境(没法像Excel那样用单元格存值),我给你两种简单易上手的解决方案,都是初学者能快速实现的:
方案1:使用VBA内置注册表函数(推荐,最简便)
VBA自带了SaveSetting和GetSetting函数,专门用来把小配置值存到Windows注册表,操作起来非常简单,不需要额外权限。
修改步骤:
更新
onLoad宏(Module1中):
把原来硬设默认值的代码改成从注册表读取上次保存的值,没有的话再用默认14:Sub onLoad(ribbon As IRibbonUI) ThisDocument.ribbonUI = ribbon ' 从注册表读取字号,不存在则用默认14 ThisDocument.Lv1size = GetSetting(AppName:="WordFontSizeMacro", Section:="Settings", Key:="Lv1Size", Default:=14) End Sub修改
editBox11_onChange宏(Module1中):
在确认输入合法的分支里,把当前值保存到注册表:Sub editBox11_onChange(control As IRibbonControl, text As String) If Not IsNumeric(text) Then MsgBox ("Please enter a number. ") ThisDocument.ribbonUI.InvalidateControl "editBox11" ElseIf text < 1 Or text > 1638 Then MsgBox ("Please enter an appropriate font size..") ThisDocument.ribbonUI.InvalidateControl "editBox11" Else ThisDocument.Lv1size = text ' 将当前字号保存到注册表 SaveSetting AppName:="WordFontSizeMacro", Section:="Settings", Key:="Lv1Size", Setting:=text End If End Sub可选:添加关闭时的保存保障(ThisDocument中):
为了确保最后一次修改的值被保存,你可以在ThisDocument里添加关闭事件:Private Sub Document_Close() ' 关闭模板时保存当前字号到注册表 SaveSetting AppName:="WordFontSizeMacro", Section:="Settings", Key:="Lv1Size", Setting:=ThisDocument.Lv1size End Sub
原理说明:
SaveSetting会把值存在注册表的HKEY_CURRENT_USER\Software\VB and VBA Program Settings\WordFontSizeMacro\Settings路径下,GetSetting则从这个路径读取,完全不需要你手动操作注册表。
方案2:使用normal.dotm的自定义文档属性(适合随模板迁移)
如果你希望配置值跟着normal.dotm模板文件走(比如换电脑时复制模板就能带走设置),可以用Word的自定义文档属性来保存值。
修改步骤:
更新
onLoad宏(Module1中):
启动时读取模板的自定义属性,不存在则创建并设默认值:Sub onLoad(ribbon As IRibbonUI) ThisDocument.ribbonUI = ribbon Dim prop As DocumentProperty ' 查找名为Lv1FontSize的自定义属性 On Error Resume Next Set prop = ThisDocument.CustomDocumentProperties("Lv1FontSize") On Error GoTo 0 If prop Is Nothing Then ' 不存在则创建属性并设默认14 ThisDocument.CustomDocumentProperties.Add _ Name:="Lv1FontSize", _ LinkToContent:=False, _ Type:=msoPropertyTypeString, _ Value:=14 ThisDocument.Lv1size = 14 Else ' 读取已有属性值 ThisDocument.Lv1size = prop.Value End If End Sub修改
editBox11_onChange宏(Module1中):
在合法输入的分支里更新自定义属性并保存模板:Sub editBox11_onChange(control As IRibbonControl, text As String) If Not IsNumeric(text) Then MsgBox ("Please enter a number. ") ThisDocument.ribbonUI.InvalidateControl "editBox11" ElseIf text < 1 Or text > 1638 Then MsgBox ("Please enter an appropriate font size..") ThisDocument.ribbonUI.InvalidateControl "editBox11" Else ThisDocument.Lv1size = text ' 更新自定义属性值 ThisDocument.CustomDocumentProperties("Lv1FontSize").Value = text ' 保存模板确保修改生效 ThisDocument.Save End If End Sub可选:添加关闭时的保存(ThisDocument中):
Private Sub Document_Close() ThisDocument.CustomDocumentProperties("Lv1FontSize").Value = ThisDocument.Lv1size ThisDocument.Save End Sub
注意事项:
- 修改自定义属性后必须调用
ThisDocument.Save,否则模板不会保存这个修改; - 如果你在Word中禁用了自动保存模板,可能需要手动确认保存。
测试方法
修改完代码后:
- 在编辑框输入一个新值(比如12),运行
Lv1宏确认生效; - 关闭所有Word窗口,重新打开;
- 查看编辑框,应该显示你上次输入的12而不是默认14。
内容的提问来源于stack exchange,提问作者Andy

