我有一些代码可以创建文件夹中的文件列表并获取它们的标签:
Option explicit
'Declare variables
Dim ws As Worksheet
Dim i As Long
Dim FolderPath As String
Dim objShell, objFolder, objFolderItem As Object
Dim FSO, oFolder, oFile As Object
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set ws = ActiveWorkbook.Worksheets("Sheet1") 'Set sheet name
Worksheets("Sheet1").UsedRange.ClearContents
ws.Range("A1:D1").Value = Array("FileName", "Tags", "Subgroup", "Group")
Set FSO = CreateObject("scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(FolderLocation_TextBox.Value)
i = 2 'First row to print result
For Each oFile In oFolder.Files
'If any attribute is not retrievable ignore and continue
On Error Resume Next
Set objFolder = objShell.Namespace(oFolder.Path)
Set objFolderItem = objFolder.ParseName(oFile.Name)
ws.Cells(i, 1) = oFile.Name
ws.Cells(i, 2).Value = objFolder.GetDetailsOf(objFolderItem, 18) 'Tags
ws.Cells(i, 5).Value = objFolder.GetDetailsOf(objFolderItem, 277) 'Description
i = i + 1
On Error Resume Next
Next
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何将它们写入列表中的那些文件中。我基本上是想从 Excel 中编写标签。
我在column中有一个完整的文件名A,并且我试图在column中写入一个字符串作为每个文件的标签B。
文件夹的地址位于文本框的值中:UserForm_Tag.FolderLocation_TextBox.value。
\n\n您可以通过 VBA 更改一组 Workbook.BuiltindocumentProperties。您还可以将自定义属性添加到 CustomDocumentProperties。\n这就是你想要的吗?注意:内置属性显示在文件属性(文件资源管理器)中。\xe2\x80\x93 Maciej Los ... 小时前
\n是的,但是我如何从Excel中写入属性呢?\xe2\x80\x93 爱德华兹 ... 小时前
\n
出色地...
\n我非常确定不可能通过标准 VBA 方法更改扩展文件属性。我已经看到了 ActiveX 对象,它可以做到这一点,例如:在问题How can I Change Extended File Properties using vba 的答案中,用户jac确实建议使用dsofile.dll.
注意: 该库仅限于 32 位 WinOS,请参阅:64 位应用程序无法使用 DSOfile。有关您的更多详细信息dsofile.dll,请参阅此处:如何使用 VBA 设置文件详细信息。最重要的信息是:
\n\n使用 VBA (DSOFile),您只能设置基本文件属性,并且只能在\nNTFS 上设置。Microsoft 已停止在辅助 NTFS 流(随 Windows Vista 引入)中存储文件属性的做法,因为当文件作为附件发送或存储在 USB 磁盘上时,保存在这些流上的属性不会随文件一起移动。 nFAT32 不是 NTFS。
\n
正如我在问题的评论中提到的,如果您想更改Excel/Word 文件的基本(最常用)扩展文件属性,我建议使用 builtinDocumentProperties。一些内置属性对应于扩展文件属性。例如:
\n| 内置文档属性 | 扩展属性 (EP) | EP指数 |
|---|---|---|
| 标题 | 标题 | 10 |
| 主题 | 主题 | 11 |
| 作者 | 作者 | 9 |
| 评论 | 评论 | 14 |
| 创建日期 | 创建日期 | 4 |
| 类别 | 类别 | 12 |
| 公司 | 公司 | 30 |
| 等等... |
枚举所有内置属性:
\nSub GetBuiltinProperties()\n Dim wsh As Worksheet, bdc As DocumentProperty\n Dim i As Long\n \n Set wsh = ThisWorkbook.Worksheets(2)\n On Error Resume Next\n i = 2\n For Each bdc In ThisWorkbook.BuiltinDocumentProperties\n wsh.Range("A" & i) = bdc.Name\n wsh.Range("B" & i) = bdc.Value\n i = i + 1\n Next\n Set wsh = Nothing\n\nEnd Sub\nRun Code Online (Sandbox Code Playgroud)\n设置内置属性:
\nSub SetBuiltinProperties()\n\n With ThisWorkbook.BuiltinDocumentProperties\n .Item("Keywords") = "My custom tag"\n .Item("Comments") = "My custom description"\n End With\n\nEnd Sub\nRun Code Online (Sandbox Code Playgroud)\n所以...如果您想更改特定工作簿的内置属性,您必须:
\n