VBA 从 Excel 写入文件标签

Edu*_*rds 5 tags excel vba

我有一些代码可以创建文件夹中的文件列表并获取它们的标签:

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

Mac*_*Los 1

\n

您可以通过 VBA 更改一组 Workbook.BuiltindocumentProperties。您还可以将自定义属性添加到 CustomDocumentProperties。\n这就是你想要的吗?注意:内置属性显示在文件属性(文件资源管理器)中。\xe2\x80\x93 Maciej Los ... 小时前

\n

是的,但是我如何从Excel中写入属性呢?\xe2\x80\x93 爱德华兹 ... 小时前

\n
\n

出色地...

\n

我非常确定不可能通过标准 VBA 方法更改扩展文件属性。我已经看到了 ActiveX 对象,它可以做到这一点,例如:在问题How can I Change Extended File Properties using vba 的答案中,用户jac确实建议使用dsofile.dll.

\n

注意: 该库仅限于 32 位 WinOS,请参阅:64 位应用程序无法使用 DSOfile。有关您的更多详细信息dsofile.dll,请参阅此处:如何使用 VBA 设置文件详细信息。最重要的信息是:

\n
\n

使用 VBA (DSOFile),您只能设置基本文件属性,并且只能在\nNTFS 上设置。Microsoft 已停止在辅助 NTFS 流(随 Windows Vista 引入)中存储文件属性的做法,因为当文件作为附件发送或存储在 USB 磁盘上时,保存在这些流上的属性不会随文件一起移动。 nFAT32 不是 NTFS。

\n
\n

正如我在问题的评论中提到的,如果您想更改Excel/Word 文件的基本(最常用)扩展文件属性,我建议使用 builtinDocumentProperties。一些内置属性对应于扩展文件属性。例如:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n
内置文档属性扩展属性 (EP)EP指数
标题标题10
主题主题11
作者作者9
评论评论14
创建日期创建日期4
类别类别12
公司公司30
等等...
\n
\n

枚举所有内置属性:

\n
Sub 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\n
Run Code Online (Sandbox Code Playgroud)\n

设置内置属性:

\n
Sub SetBuiltinProperties()\n\n    With ThisWorkbook.BuiltinDocumentProperties\n        .Item("Keywords") = "My custom tag"\n        .Item("Comments") = "My custom description"\n    End With\n\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n

所以...如果您想更改特定工作簿的内置属性,您必须:

\n
    \n
  • 打开它,
  • \n
  • 更改/设置内置属性,
  • \n
  • 保存,
  • \n
  • 并关闭它。
  • \n
\n