哪种机制允许Excel将用户的操作传达给外部?

时间:2016-02-03 16:58:11

标签: python excel vba excel-vba vsto

Excel provides several options for developing applications that interface with it。 但似乎所有这些选项都允许从外部控制Excel工作簿。但是,我想要反过来,正是我想“听”用户对Excel工作簿的操作。例如,侦听器可能是Excel中的加载项;当用户在单元格中输入值时,监听器可以捕获此操作,并在屏幕上打印“在单元格XXX中输入值XXX”。有谁知道有哪种机制可以实现这个目标?

编辑1: 感谢@Nathan_Sav和@Rik Sportel的投入。因此,如果我理解得很好,他们正在使用VBA来监听事件并生成消息,几乎所有事件都可以被捕获。

让我详细说明我真正想做的事情。实际上,我希望在Excel之外有一个应用程序(例如,用Python或.NET编写),并且应用程序可以根据用户对工作簿的操作来执行一些操作。如果应用程序必须读取VBA监听器生成的消息,然后解析它们,然后做相应的操作,恐怕会很慢。是否有直接(或内部)方式让应用程序连接到Excel并听取用户的操作。

2 个答案:

答案 0 :(得分:1)

您可以通过使用带有Excel应用程序对象的类,使用with events语句将事件接收Excel应用程序(在插件中控制所有Excel工作表)

所以类似的东西(没有测试过没有访问过的vba)

在类clsExcelListner

private withevents excelListner as Excel.Application 

public sub initialise(ExcelApp as Excel.Application)
    set excelListner =ExcelApp
end sub

然后在Workbook Open

public cls_ExcelListner as clsExcelListner
public sub Workbook_Open()

    set cls_ExcelListner = new clsExcelListner
    cls_ExcelLister.Initialise(application)

end sub

在课程中,您可以使用工作表更改事件。这些事件可以帮助你做你需要的事情,已经在工作簿中,工作表更改等等,可能只是最好使用那些,因为列表工作者需要考虑所有文档,并说用户saveAs,然后如何你检查一下要收听的文件吗?

答案 1 :(得分:0)

内森已经指出了正确的方向。 然而,它可以做得更清洁。

首先,你需要Listener类。将以下内容放在您调用“EventLogger”

的类模块中
Private WithEvents ExcelListener As Excel.Application

Private Sub Class_Initialize()
    Set ExcelListener = Application
End Sub

Private Sub excelListener_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    MsgBox Sh.Name & "!" & Target.Address & " changed into " & Target.Value
End Sub
'Hook into any other events you wish.

在工作簿模块中,将以下内容放在Workbook_Open()

Public Sub Workbook_Open()
    Set evLogger = New EventLogger
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Set evLogger = Nothing
End Sub

由于类的Initialize事件已经设置了应用程序,因此不再需要它。

最后,您需要一个具有全局变量EventLogger的常规模块:

Public evLogger As EventLogger

现在,您可以打开日志文件并编写每个事件,而不是消息框,只需在内存中附加一个巨大的字符串,然后将其写入关闭的文本文件,记录每个事件或任何您想要的内容。只需展开课程以保留用户名等,即可创作:)

将整个工作簿保存为加载项并安装到用户的Excel中。 享受!

如果您只想跟踪特定工作簿的更改,则可以始终使用本文所述的本机更改跟踪器:https://support.office.com/en-us/article/Track-changes-in-a-shared-workbook-22aea671-cac7-4fa3-845d-eeb23725bd15