gpt4 book ai didi

excel - 用于从其他应用程序切换到 Excel 的事件处理程序?

转载 作者:行者123 更新时间:2023-12-02 08:32:16 24 4
gpt4 key购买 nike

我想在从其他应用程序切换时激活工作簿。我使用的是 Excel 2010。

在 ThisWorkbook 对象中,我尝试了以下操作:

Private Sub Workbook_Activate()
MsgBox "1"
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
MsgBox "2"
End Sub

在类模块中,我尝试过这些:

Public WithEvents appevent As Application
Private Sub appevent_ProtectedViewWindowActivate(ByVal Pvw As ProtectedViewWindow)
MsgBox "1"
End Sub

Private Sub appevent_ProtectedViewWindowOpen(ByVal Pvw As ProtectedViewWindow)
MsgBox "2"
End Sub

Private Sub appevent_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
MsgBox "3"
End Sub

Private Sub appevent_WorkbookActivate(ByVal Wb As Workbook)
MsgBox "4"
End Sub

Private Sub appevent_WorkbookDeactivate(ByVal Wb As Workbook)
MsgBox "5"
End Sub

要求是在激活该工作簿(单击或使用 alt-tabbed 激活)时禁用 CellDragAndDrop 属性,并在该工作簿未处于事件状态时重新启用它。

最佳答案

好吧,我一开始以为这是功能区定制的工作。我无法使用功能区执行此操作(并不是说这是不可能的,但我没有看到任何会影响此功能的命令MSO)。

您的类模块就像这样(我没有尝试您列举的其他 View 状态)。该模块封装了事件类并包含应用程序级事件处理程序。为此,我认为您可能只需要 WorkbookActivate。引发事件的工作簿将确定是否启用/禁用该属性。

Public WithEvents appevent As Application
Dim ret As String
Private Sub appevent_WorkbookActivate(ByVal wb As Workbook)

Call ToggleDragAndDrop(wb, ret)
'Comment out this line when satisfied it is working as expected
MsgBox "Cell drag & drop enabled = " & ret
End Sub

在名为 mod_DragDrop 的标准模块中使用以下内容:

Option Explicit
Public XLEvents As New cEventClass
Sub SetEventHandler()

If XLEvents.appevent Is Nothing Then
Set XLEvents.appevent = Application
End If

End Sub

Sub ToggleDragAndDrop(wb As Workbook, Optional ret$)

Application.CellDragAndDrop = (wb.Name <> ThisWorkbook.Name)
ret = Application.CellDragAndDrop
End Sub

将其放入 Workbook_Open 事件处理程序中:

Option Explicit
Private Sub Workbook_Open()
'Create the event handler when the workbook opens
Call mod_DragDrop.SetEventHandler
Call mod_DragDrop.ToggleDragAndDrop(Me)

End Sub

注意:如果您在调试时“结束”运行时或执行任何可能导致状态丢失的操作,您将丢失事件处理程序。这始终可以通过调用 Workbook_Open 过程来恢复,因此额外的保护措施可能是将其添加到 ThisWorkbook 代码模块中:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' Additional safeguard in case state loss has killed the event handler:
' use some workbook-level events to re-instantiate the event handler

Call Workbook_Open
End Sub

我已在我的 Google Docs 上提供了我的文件的副本,以防万一上面提供的代码中有一些错误的拼写错误。

关于excel - 用于从其他应用程序切换到 Excel 的事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320840/

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