如何获取工作簿文件的"上次保存者"属性

Gre*_*ern 6 excel winapi vba file excel-vba

在Windows资源管理器中,如果我右键单击某个文件并选择"属性"以获取文件的"属性"窗口,然后选择"详细信息"选项卡,则会在其中列出一个名为"上次保存者"的属性.它似乎是上次修改文件时登录的Windows帐户名.

我查看了FileSystemObject但是我没有看到File对象有这样的属性.

我如何在VBA中获得该属性?它有Windows API吗?

更新:

在这个线程中有3次尝试使用Shell的GetDetailsOf.我很欣赏这些努力,但是在尝试了所有这些(特别是OssieMac的代码示例)之后我似乎很清楚,在GetDetailsOf中找不到存储在文件系统的"Last Saved By"字段中的文本.

抓我的头.Windows资源管理器如何做到这一点?

Rob*_*zie 6

试试这个 - 代码使用BuiltinDocumentProperties类:

Option Explicit

Sub Test()
    MsgBox LastAuthor
End Sub

Function LastAuthor() As String
    LastAuthor = ThisWorkbook.BuiltinDocumentProperties("Last Author")
End Function
Run Code Online (Sandbox Code Playgroud)

编辑

使用扩展文件属性 - Microsoft报告的幻数Author9.但是,随着Windows版本的发布,这个数字随着时间而变化,因为Vista已经发布20- 请看这个链接.进一步测试,您也可以尝试10使用Windows 10.

Option Explicit

Sub Test()

    Dim varPath As Variant
    Dim varFileName As Variant

    varPath = "C:\Users\foo\bar\" '<~~ ensure final \
    varFileName = "lol.xlsx"


    'depending on OS version, try 9, 10 and 20
    Debug.Print GetAuthorFromShell(varPath, varFileName, 9)
    Debug.Print GetAuthorFromShell(varPath, varFileName, 10)
    Debug.Print GetAuthorFromShell(varPath, varFileName, 20)

End Sub

Function GetAuthorFromShell(varPath As Variant, varFileName As Variant, intProperty As Integer) As String

    Dim objShell As Object
    Dim objFolder As Object
    Dim strAuthor As String

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(varPath) 

    With objFolder
        strAuthor = .getdetailsof(.Items.Item(varFileName), intProperty)
    End With

    GetAuthorFromShell = strAuthor

End Function
Run Code Online (Sandbox Code Playgroud)