Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定谁正在Sharepoint上打开Excel文件_Excel_Sharepoint_Vba - Fatal编程技术网

确定谁正在Sharepoint上打开Excel文件

确定谁正在Sharepoint上打开Excel文件,excel,sharepoint,vba,Excel,Sharepoint,Vba,我知道“Environ”可以识别谁打开了文件,但我不知道如何为它编写代码 我发现一个答案是,当打开一个文件时,通过Outlook发送电子邮件,但理想情况下,它会记录在工作表或其他文件的隐藏选项卡中,并在其中注明此人的姓名和时间。由于用户不会对文件进行编辑和/或保存,我不知道这是否是一个选项。以下是一些可以使用的代码。打开VBE(Alt+F11)双击项目窗口中电子表格的“ThisWorkbook”,然后将其粘贴到中 Public Declare Function GetUserName Lib "

我知道“Environ”可以识别谁打开了文件,但我不知道如何为它编写代码


我发现一个答案是,当打开一个文件时,通过Outlook发送电子邮件,但理想情况下,它会记录在工作表或其他文件的隐藏选项卡中,并在其中注明此人的姓名和时间。由于用户不会对文件进行编辑和/或保存,我不知道这是否是一个选项。

以下是一些可以使用的代码。打开VBE(Alt+F11)双击项目窗口中电子表格的“ThisWorkbook”,然后将其粘贴到中

Public Declare Function GetUserName Lib "advapi32.dll" _
    Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Workbook_Open()

    'When the worksheet opens, this will write the computer username
    '   and the date and time to a worksheet of your choice
    '   just change that "YourHiddenSheetNameHere" to the name of your
    '   hidden tab

    Dim lastRow As Integer
    Dim hiddenSheet As Worksheet

    Set hiddenSheet = Sheets("YourHiddenSheetNAmeHere")
    lastRow = hiddenSheet.Range("A999999").End(xlUp).Row

    hiddenSheet.Cells(lastRow, 1).Value = ReturnUserName
    hiddenSheet.Cells(lastRow, 1).Value = Now()


End Function

Function ReturnUserName() As String
     ' returns the NT Domain User Name
    Dim rString As String * 255, sLen As Long, tString As String
    tString = ""
    On Error Resume Next
    sLen = GetUserName(rString, 255)
    sLen = InStr(1, rString, Chr(0))
    If sLen > 0 Then
        tString = Left(rString, sLen - 1)
    Else
        tString = rString
    End If
    On Error GoTo 0
    ReturnUserName = UCase(Trim(tString))
End Function
每当有人打开工作簿保存登录计算机时使用的用户名以及日期和时间时,就会触发此操作。保存到您粘贴在其中的任何选项卡。您需要使用
.xlsm
而不是
.xlsx
保存工作簿,因为它将是一本启用宏的书