如何获得"最后保存的"工作簿文件的属性

时间:2016-12-22 02:49:52

标签: vba excel-vba file winapi excel

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

我查看了FileSystemObject,但我没有看到File对象具有这样的属性。

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

更新:

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

抓我的头。 Windows资源管理器是如何做到的?

2 个答案:

答案 0 :(得分:6)

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

Option Explicit

Sub Test()
    MsgBox LastAuthor
End Sub

Function LastAuthor() As String
    LastAuthor = ThisWorkbook.BuiltinDocumentProperties("Last Author")
End Function

修改

使用扩展文件属性 - Microsoft报告Author的幻数为9。但是,随着Windows版本的发布,这个数字会随着时间而变化,因为Vista已经20 - 请参阅this link。对于某些测试,您还可以尝试{10}用于Windows 10。

10

答案 1 :(得分:3)

此数据称为Extended File Properties,并存储在NTFS元数据中。您可以使用以下脚本阅读它们:

Dim arrHeaders(266)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\Test.xtx")
For i = 0 to 265
 arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
Next
For Each strFileName in objFolder.Items
 For i = 0 to 265
 Wscript.Echo i & vbtab & arrHeaders(i) _
 & ": " & objFolder.GetDetailsOf(strFileName, i)
 Next
Next

请注意,不同的操作系统版本具有不同数量的扩展文件属性。 Windows 2000允许35,Windows Vista扩展属性计数为266。

<强>参考文献:

1)Borrowing from Windows Explorer in PowerShell part 2: extended properties

2)Retrieving Extended File Properties