我正在使用Excel 2010和VBA重新组织我的C:\驱动器上的一些Word文档,我想将每个文档的“Company”属性拉入包含文档列表的工作表中。每个文档的完整文件路径显示在行A中(如下所示:“C:\ folder \ subfolder \ file.doc”),我想填充F行中相应的“Company”属性。
我正在尝试为自定义Excel函数DocCompany编写一个宏,该函数将使用包含本地文件路径的文本字符串来返回文件路径标识的文档的“Company”属性。 我对上次修改和文件大小属性运气好,因为它们都有专用的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的宏,它将接受本地文件路径字符串作为输入并用它来输出公司文件的财产。
这就是我的宏现在的样子:
Function CompanyID(FileName As String) As String
CompanyID = Documents(FileName).Open
Documents(FileName).BuiltinDocumentProperties (wdPropertyCompany)
End Function
当我尝试保存时,Excel会返回错误消息“编译错误:子或函数未定义”。然后它选择第二行中“Documents”集合的引用。
为什么Excel坚持在我找到的每个引用确认它实际上是对象或集合时,将“Documents”定义为变量?我该怎么做才能使这段代码有效?我需要采取不同的方法吗?
答案 0 :(得分:1)
为什么Excel坚持要我定义" Documents"当我能找到的每个引用都确认它实际上是一个对象或集合时作为变量?
由于Documents
不是Excel对象模型的一部分,因此它被解释为变量。您需要将Word绑定到Excel实例,并引用该Word应用程序类的实例。
Function CompanyID(FileName As String) As String
Dim wdApp as Object 'WOrd.Application
Dim doc as Object 'Word.Document
Const wdPropertyCompany as Long = 21 'Explicit reference for late-bound Word Application
Set wdApp = CreateObject("Word.Application")
Set doc = wdApp.Documents.Open(FileName)
CompanyID = doc.BuiltinDocumentProperties (wdPropertyCompany)
doc.Close False
End Function
答案 1 :(得分:0)
Function F_snb(c00)
With GetObject(c00)
F_snb = .BuiltinDocumentProperties(21)
.Close 0
End With
End Function
A2中的:G:\ OF \ example.docx
D2中的:= F_snb(A2)