【发布时间】:2015-02-23 22:23:13
【问题描述】:
我正在使用 Excel 2010 和 VBA 重新组织 C:\ 驱动器上的一些 Word 文档,并且我想将每个文档的“公司”属性拉入包含文档列表的工作表中。每个文档的完整文件路径出现在 A 行(如:“C:\folder\subfolder\file.doc”),我想在 F 行填充相应的“Company”属性。
我正在尝试为自定义 Excel 函数 DocCompany 编写一个宏,该函数将使用包含本地文件路径的文本字符串来返回文件路径标识的文档的“公司”属性。 我对 Last Modified 和 File Size 属性的运气更好,因为它们都有专用的 VBA 函数(分别为 FILEDATETIME 和 FILELEN)。在每种情况下,我所要做的就是为自定义 Excel 函数编写一个宏,该函数返回位于工作表中的文件路径字符串的 VBA 函数的结果。
给定以下函数, =GetFileDateTime(A1) 将返回由 A1 中包含的文件路径字符串标识的文档的最后保存日期。
Function GetFileDateTime(FileName As String) As Date
GetFileDateTime = FileDateTime(FileName)
End Function
给定以下函数, =FileSize(A1) 将返回由 A1 中包含的文件路径字符串标识的文档的文件大小(以字节为单位)。
Function FileSize(FileName As String)
FileSize = FileLen(FileName)
End Function
但是,Company 属性没有对应的 VBA 函数,因此(如上所述),我想编写一个宏定义一个自定义 Excel 函数 DocCompany,它将接受本地文件路径字符串作为输入并使用它来输出 Company文档的属性。
这是我的宏现在的样子:
Function CompanyID(FileName As String) As String
CompanyID = Documents(FileName).Open
Documents(FileName).BuiltinDocumentProperties (wdPropertyCompany)
End Function
当我尝试保存它时,Excel 返回错误消息“编译错误:未定义子或函数”。然后它在第二行中选择对“Documents”集合的引用。
当我能找到的每个引用都确认它实际上是一个对象或集合时,为什么 Excel 坚持我将“文档”定义为一个变量?我该怎么做才能使此代码正常工作?我需要采取不同的方法吗?
【问题讨论】:
-
您可以像this answer 中所示将其作为UDF 工作,但是,如果您每次都必须创建一个Word 应用程序对象,那么UDF 的运行速度将会非常缓慢。您还需要确保在处理每个创建的 Word 应用程序对象时一丝不苟