VBA跟踪文件使用情况

时间:2015-10-01 13:13:24

标签: vba email sharepoint

我目前有一个生成客户语句的excel文件。我需要跟踪谁发表了他们的陈述。 目前,每当生成语句时,我都会有一个宏,它会向我发送一封包含其用户名的电子邮件。但是,在瘦客户端系统上运行的人会收到提示;

'程序正在尝试代表您发送电子邮件...'

在某种程度上我可以摆脱这个提示并仍然发送电子邮件,或者有任何人对如何跟踪使用情况有任何其他想法。我通过Share Point共享该文件。那可能有一些功能吗?

谢谢

2 个答案:

答案 0 :(得分:2)

如果您的网络上有一个每个人都有权访问的位置,您可以编写一个日志文件。很可能是Sharepoint服务器上的一个点。

从目前发送电子邮件的代码中调用此类内容。

在VBA IDE中,转到工具菜单并选择参考。选择“Microsoft脚本运行时”

Private Sub LogUsage()

    Dim ts As TextStream
    Dim fs As FileSystemObject
    Dim strLogFile As String

    strLogFile = "\\servername\sharename\log\Usage.txt"

    'Check if the file exists, if it does, open it, if it doesn't create it
    Set fs = New FileSystemObject
    If fs.FileExists(strLogFile) = True Then
        Set ts = fs.OpenTextFile(strLogFile, ForAppending)
    Else
        Set ts = fs.CreateTextFile(strLogFile, True, False)
    End If

    'Log your entry
    ts.WriteLine "Used by " & Environ$("Username") & " at " & Now & " on computer " & Environ$("Computername")

     'Clean up
     ts.Close: Set ts = Nothing
     Set fs = Nothing

 End Sub

答案 1 :(得分:1)

我在网络共享上使用共享数据库,如SQL Server或Access,而不是电子邮件。与单独的电子邮件相比,它更容易使用。

如果必须使用电子邮件,则可以在Excel宏中使用CDO对象,但您的用户必须能够访问网络上的SMTP服务器(通常,Exchange服务器可以为此工作;请查看Outlook设置和看看它连接的服务器)。通常,如果每个人都可以访问相同的LAN资源,这不是问题。

在VBA编辑器中将引用添加到Microsoft CDO for Windows 2000 Library(工具 - > VBA中的引用。不要担心“Windows 2000”;它应该在您的系统上可用。)

示例代码

Dim iMsg As CDO.Message
Dim iConf As CDO.Configuration
Dim Flds As ADODB.Fields

Set iMsg = New CDO.Message
Set iConf = New CDO.Configuration

Set Flds = iConf.Fields

With Flds
    .Item(cdoSendUsingMethod) = cdoSendUsingPort
    'Put the address of your SMTP server here
    .Item(cdoSMTPServer) = "smtp.example.com"
    .Item(cdoSMTPConnectionTimeout) = 10
    .Item(cdoSMTPAuthenticate) = cdoBasic
    .Item(cdoSendUserName) = "Username To Authenticate SMTP Server With"
    .Item(cdoSendPassword) = "Password To Authenticate SMTP Server With"
    .Item(cdoURLGetLatestVersion) = True
    .Update
End With

With iMsg
    Set .Configuration = iConf
    .From = "from@example.com"
    .ReplyTo = "replyto@example.com"
    .MimeFormatted = False
    .AutoGenerateTextBody = False
    .To = "to@example.com"
    .CC = "cc@example.com"
    .BCC = "bcc@example.com"
    .Subject = "Subject of Email"
    .HTMLBody = "<body>HTML text to send</body>"

    'If you need to add attachments
    .AddAttachment "C:\Local\Path\To\Attachment.xlsx"

    .Send
End With