gpt4 book ai didi

vba - Word vba - 如果光标在单元格/书签中 - 运行代码

转载 作者:行者123 更新时间:2023-12-01 00:06:46 28 4
gpt4 key购买 nike

我有一个包含几个部分和几个表格的模板文档。
问题是,我试图在表格中的单元格中插入一个下拉列表。
为了使下拉列表起作用,文档需要受到保护。但是,如果我保护表所在的整个部分,则整个表都会受到保护。

所以,我想知道如果用户点击下拉列表,是否有一种执行宏代码的方法?然后代码将保护文档,使控件实际工作,然后选择一个选项,当用户在字段外单击时,文档应该不 protected 。

这可能吗?

最佳答案

Word VBA 中实际上有一个 WindowSelectionChange 事件可供您使用。它在 Word VBA 帮助文件中的“将事件与应用程序对象一起使用”下进行了描述。

诀窍是使用 WithEvents 关键字将您的应用程序分配给类模块(我将其命名为 EventClassModule)中的变量:

Public WithEvents App As Word.Application

然后在您的普通 Document Open 事件中,您可以将变量初始化为当前应用程序:
Dim oEvents As New EventClassModule
Private Sub Document_Open()
Set oEvents.App = Word.Application
End Sub

回到 EventClassModule 中,您使用 WindowSelectionChange 事件来检查选择是否为表格:
Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
If Sel.Information(wdWithInTable) And ThisDocument.ProtectionType = wdNoProtection Then
ThisDocument.Protect wdAllowOnlyFormFields
ElseIf ThisDocument.ProtectionType <> wdNoProtection Then
ThisDocument.Unprotect
End If
End Sub

每当光标更改位置时,都会调用此代码。我对其进行了测试,它有点挑剔(oEvents 对象由于某种原因倾向于变得未初始化),但希望这将是您解决方案的开始。

关于vba - Word vba - 如果光标在单元格/书签中 - 运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043307/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com