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

Ken*_*nes 4 vba word-vba

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

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

这可能吗?

小智 5

您可以使用Word VBA中的WindowSelectionChange事件.它在"使用带有应用程序对象的事件"下的Word VBA帮助文件中进行了描述.

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

Public WithEvents App As Word.Application
Run Code Online (Sandbox Code Playgroud)

然后在普通的Document Open事件中,您可以将变量初始化为当前的Application:

Dim oEvents As New EventClassModule
Private Sub Document_Open()
    Set oEvents.App = Word.Application
End Sub
Run Code Online (Sandbox Code Playgroud)

回到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
Run Code Online (Sandbox Code Playgroud)

只要光标改变位置,就会调用此代码.我测试了它并且它有点挑剔(oEvents对象由于某种原因倾向于未初始化),但希望这将是您的解决方案的开始.