这篇文章的 Microsoft Word 97 版本,请参见
187985。
概要
这篇文章包含四个 Microsoft Visual Basic for Applications 可用于模拟 Windows 功能在受保护文档的窗体字段之间移动的 ENTER 键的 Microsoft Word 6.0 的宏。
详细信息
Microsoft 提供的编程示例仅用于说明,没有任何明示或暗示的担保,包括但不是限于,适销性和针对特定用途的适用性的暗示保证。本文假定您熟悉所演示的编程语言和用于创建和调试过程的工具。Microsoft 的支持人员可以帮助解释某个特定过程的功能,但是他们不会修改这些示例以提供额外的功能或构建过程以满足您的特定需求。
如果您的编程经验有限,您可能需要与 Microsoft 认证合作伙伴或 Microsoft 顾问服务联系。有关详细信息,请访问下列 Microsoft Web 站点:
Microsoft 认证合作伙伴- https://partner.microsoft.com/global/30000104
Microsoft 顾问服务- http://support.microsoft.com/gp/advisoryservice
有关可用的支持选项以及如何与 Microsoft 联系的详细信息,请访问下面的 Microsoft 网站:http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
运行示例代码的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
212536 OFF2000: 如何运行知识库文章中的示例代码
在 Word 6.0 中输入密钥的功能
在 Word 6.0 为 Windows 中,如果您受保护的文档中按回车键,窗体、 插入点移到下一窗体域。与此相反,更高版本的 Word 中,ENTER 键不会移动到下一个窗体域,但改为插入一个段落标记,就像未受保护的文档中。这允许您在文本型窗体域中输入多行文本。
宏
以下是四个 Visual Basic for Applications 结合使用,可以模仿新的受保护的表单字段文档基于的模板中的输入项的 Windows 功能的 Word 6.0 的宏。下面是功能的每个宏的简要说明:
-
第一个宏将插入点移动到下一个窗体域。
-
第二个宏为 ENTER 键指定的第一个宏。
-
第三个宏可确保关键的功能继续当您打开的文档,在将来根据表单模板。
-
第四个宏从还原 ENTER 键的默认功能 ENTER 键可以删除已指定的宏。
重要提示: 为了工作编写此代码,不应保护该模板。如果对模板进行保护,您会收到以下错误消息:
无法修改内容。
若要取消对模板的保护,请执行以下步骤:
-
打开包含本文中介绍的宏的模板。
-
在工具菜单上单击取消保护文档。
-
在文件菜单上,单击保存。
-
在文件菜单上,单击关闭。
第一个宏: 将插入点移动到下一窗体域
该宏将插入点移到下一窗体域。如果当前窗体域在文档中的最后一个,它的第一个窗体字段中移动插入点。
该宏使用书签集合来检索当前窗体字段的名称。每个窗体字段的名称也是插入窗体域的书签的名称。如果您有任何其他书签在文档中,您可能需要添加更多代码来处理潜在的错误。该宏还假定文档中的所有窗体字段允许用户输入。如果不是这种情况在您的文档,您需要在宏中添加额外的代码。
该宏将查看是否当前节受保护或保护然后移动到下一窗体域 (受保护的分区) 或插入段落标记 (在未受保护的部分)。此功能是必需包含窗体输入和未受保护的保护这两个部分的文档部分。
Sub EnterKeyMacro()
' Check whether the document is protected for forms
' and whether the protection is active.
If ActiveDocument.ProtectionType = wdAllowOnlyFormFields And _
Selection.Sections(1).ProtectedForForms = True Then
' Retrieve the bookmark of the current selection.
' This is equivalent to the name of the form field.
myformfield = Selection.Bookmarks(1).Name
' Go to the next form field if the current form field
' is not the last one in the document.
If ActiveDocument.FormFields(myformfield).Name <> _
ActiveDocument.FormFields(ActiveDocument.FormFields.Count) _
.Name Then
ActiveDocument.FormFields(myformfield).Next.Select
Else
' If the current form field is the last one,
' go to the first form field in the document.
ActiveDocument.FormFields(1).Select
End If
Else
' If the document is not protected for forms,
' insert a tab stop character.
Selection.TypeText Chr(13)
End If
End Sub
第二个宏: 将 EnterkeyMacro 宏分配给 ENTER 键
该宏将 EnterKeyMacro 宏附加到 ENTER 键,从而在受保护的文档的窗体字段中使用时重新编程的键的函数。自定义模板中使用此宏时,其命名为 AutoNew。这将更改基于该模板的所有新窗体文档 ENTER 键的功能。
Sub AutoNew()
' Do Not protect the template containing these macros.
CustomizationContext = ActiveDocument.AttachedTemplate
' Bind the ENTER key to the EnterKeyMacro.
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyReturn), _
KeyCategory:=wdKeyCategoryMacro, Command:="EnterKeyMacro"
' Reprotect the document with Forms protection.
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End Sub
第三个宏: 将宏分配给 ENTER 键
添加下面的代码使用宏。这将确保对关键功能继续当您打开的文档,在将来根据表单模板。
Sub AutoOpen()
' This macro will reassign the ENTER key when you open an existing
' Word form fields document.
CustomizationContext = ActiveDocument.AttachedTemplate
' Bind the Enter key to the EnterKeyMacro.
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyReturn), _
KeyCategory:=wdKeyCategoryMacro, Command:="EnterKeyMacro"
End Sub
注意: 运行这些宏可能会禁用某些功能,例如自动更正和自动图文集,并可能会影响依赖于正常操作 ENTER 键其它功能。您需要运行第四个宏来还原默认功能 ENTER 键,或重新启动 Word。
第四个宏: 删除分配给 ENTER 键的命令
该宏将恢复 ENTER 键的默认功能。自定义模板中使用此宏时,将它命名 AutoClose。
Sub AutoClose()
CustomizationContext = ActiveDocument.AttachedTemplate
FindKey(KeyCode:=BuildKeyCode(wdKeyReturn)).Disable
' Disables prompt to save template changes.
Templates(1).Save
End Sub
注意: 将CustomizationContext属性设置键盘自定义在此种情况下,模板附加到活动文档保存的位置。
参考资料
有关创建自定义的解决方案和 Microsoft Word 2000 中使用 Visual Basic for Applications 的可用资源的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
212623 WD2000: 宏编程资源
226118 OFF2000: Visual Basic for Applications 的编程资源