如何跟踪谁使用我的Excel电子表格?

我创build了一个Excel电子表格,我的老板想把它放在公司的内部网站上。 电子表格包含一些很less使用的,深奥的,但方便的function,只有公司内的某些员工会发现真正有用的。

问题是我不知道未来的用户是谁,我的老板要我确定谁使用我的电子表格。

他要求我用密码保护Excel电子表格,使得一个密码不能解锁所有人可以从网站上下载的副本。 例如,我不能将密码设置为“stackoverflow”,因为一旦用户合法地从我这里获取密码并与其他人共享,公司内的任何人都可以使用它来解锁所有随后下载的电子表格。 我永远无法确定谁在使用电子表格。 此外,我不能修改网站,所以我希望通过Excel和电子邮件来实现这个用户跟踪。

有没有办法让Excel随机生成一个string,用户通过电子邮件发送给我,然后用适当的密码进行响应,以解锁文件(基于生成的string)? 这要求用户在使用电子表格(理想情况)之前先与我联系。

Excel 2010 Professional Plus中可以这样安排吗?

我认为你所描述的方法中的密码保护是不必要的麻烦,如果它甚至是可行的。

他要求我用密码保护Excel电子表格,使得一个密码不能解锁所有人可以从网站上下载的副本。

我无法想象如何这可能只使用Excel。 也许一个插件可以做到这一点,但在文件级别,我不认为这是可以做到的,至less不容易。

我永远无法确定谁在使用电子表格。

听起来这是非常重要的一点。 您没有使用密码作为安全措施,只是作为一种看门人的方法来确定在使用该文件。 这可以通过其他方式实现自动化,其中最简单的就是使用某些Environmentvariables,例如:

MsgBox Environ("username")将显示一个消息框与当前用户的名字。

您可以将Environ("username")分配给一个stringvariables,然后您可以例如自动化Outlook向您发送一封“John Doe已经打开该文件”的电子邮件,或者其他相关信息。 如果你想避免每次都收到一封邮件,你可以在Excel文件中使用Named Rangevariables进行一些调整,以便macros只发送一次邮件等。

或者,您可以写一个日志/ txt文件到共享networking位置(当然,假设用户连接到networking),而不是发送电子邮件。

更新

这里是我从网上的地方采取的一些示例代码,它会发送来自用户的电子邮件。 您将不得不修改sendTo行来使用您的电子邮件地址作为收件人等。

把它放在工作簿的代码模块中,每当它打开这个文件时,都应该给你发电子邮件:

 Option Explicit Private Sub Workbook_Open() ' This example uses late-binding instead of requiring an add'l reference to the ' MS Outlook 14.0 Object Library. Dim oApp As Object 'Outlook.Application 'Object Dim ns As Object 'Namespace Dim fldr As Object 'MAPIFolder Dim mItem As Object 'Outlook.MailItem Dim sendTo As Object 'Outlook.Recipient Dim bOutlookFound As Boolean On Error Resume Next Set oApp = GetObject(, "Outlook.Application") bOutlookFound = Err.Number = 0 On Error GoTo 0 If Not bOutlookFound Then Set oApp = CreateObject("Outlook.Application") 'New Outlook.Application '# Set the namespace and folder so you can add recipients Set ns = oApp.GetNamespace("MAPI") Set fldr = ns.GetDefaultFolder(6) 'olFolderInbox '# create an outlook MailItem: Set mItem = oApp.CreateItem(0) 'olMailItem '# assign a recipient Set sendTo = mItem.Recipients.Add("YourName@Company.Com") sendTo.Type = 1 'To olTo '# assign another recipient Set sendTo = mItem.Recipients.Add("YourManager@Company.Com") sendTo.Type = 1 '# Validate the recipients (not necessary if you qualify valid email addresses: For Each sendTo In mItem.Recipients sendTo.Resolve Next mItem.Subject = "A user has opened the Excel file" mItem.Body = "This is an automated message to inform you that " & _ Environ("username") & " has downloaded and is using the file." mItem.Save mItem.Send 'If outlook was not already open, then quit If Not bOutlookFound Then oApp.Quit Set oApp = Nothing End Sub 

在David的答案上进行扩展,你也可以使用一个在工作表打开时自动运行的macros,并且可以将Environ(“username”)写入隐藏工作表中的下一个可用行。 我之前使用过Environ(“用户名”),它非常有用,快捷,简单。

任何工作表上的这个子将自动运行(IIRC):

 Private Sub Auto_Open() End Sub 

您也可以在下一列中添加时间戳以显示电子表格的使用时间。