gpt4 book ai didi

vba - 如何获取工作簿文件的 "Last Saved By"属性

转载 作者:行者123 更新时间:2023-12-02 04:32:48 25 4
gpt4 key购买 nike

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

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

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

更新:

该线程中有 3 次尝试使用 Shell 的 GetDetailsOf 来完成此操作。我很欣赏这种努力,但在尝试了所有方法(尤其是 OssieMac 的代码示例)后,我似乎很清楚,在 GetDetailsOf 中找不到存储在文件系统的“最后保存者”字段中的文本。

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

最佳答案

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

Option Explicit

Sub Test()
MsgBox LastAuthor
End Sub

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

编辑

使用扩展文件属性 - Microsoft报告Author 的魔数(Magic Number)是9。然而,这个数字随着 Windows 版本的推移而变化,自 Vista 以来一直是 20 - 请参阅 this link 。为了进一步进行一些测试,您还可以尝试适用于 Windows 10 的 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

关于vba - 如何获取工作簿文件的 "Last Saved By"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com