前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel实战技巧57: 标识并使用VBA代码识别特定的工作簿

Excel实战技巧57: 标识并使用VBA代码识别特定的工作簿

作者头像
fanjy
发布2019-10-28 17:20:04
1.7K0
发布2019-10-28 17:20:04
举报
文章被收录于专栏:完美Excel完美Excel

有时候,需要使用代码确认某个工作簿是否是特定模板创建,或者是否属于某个应用程序,如果是就打开并操作该工作簿或应用程序。如何实现呢?

一种常用的方法是对工作簿文件添加自定义的文档属性,这样让代码在不打开工作簿的情况下判断是否是想要的工作簿。

为工作簿添加自定义文档属性

单击“文件——信息——属性——高级属性”,打开工作簿的“属性”对话框。选取“自定义”选项卡,在名称文本框中输入属性名称,示例中是“MyTestBook”,在类型下拉列表中选择“是或否”,选取取值选项按钮中的“是”,单击“添加”按钮,如下图1所示,为该工作簿添加自定义文档属性。

图1

安装工具库DSOFile.dll

我们要使用名为DSOFile.dll的COM对象从关闭的工作簿中读取文档属性,因此,需要下载并安装该DLL。可以在Microsoft的网站上下载:

https://www.microsoft.com/en-us/download/details.aspx?id=8422

下载后,双击安装。安装完毕后,选择VBE的菜单“工具——引用”命令,在“引用”对话框中找到并选取“DSO OLE Document Properties Reader 2.1”前的复选框,单击“确定”,如下图2所示。

图2

编写检查自定义文档属性的函数

下面的自定义函数FileHasSomeProperty用来检查指定的文件是否具有指定的文档属性,其中参数sFile接受指定的文件,参数sProperty接受指定文档属性名,如果sFile中具有名为sProperty的属性,则返回True,否则返回False。

代码语言:javascript
复制
'检查指定文件是否具有特定的文档属性
Function FileHasSomeProperty(ByVal sFileAs String, _
     ByVal sProperty As String) As Boolean
   Dim objDSO As DSOFile.OleDocumentProperties
   Dim objProperty As DSOFile.CustomProperty
   
    '使用DSOFile来获取指定文件的文档属性
   Set objDSO = New DSOFile.OleDocumentProperties
   objDSO.Open sFile
   
    '遍历自定义文档属性集合
    '如果存在指定名称且取值为是的属性
    '则返回True
   For Each objProperty In objDSO.CustomProperties
       If (objProperty.Name = sProperty) _
            And (objProperty.Type =dsoPropertyTypeBool) Then
            FileHasSomeProperty = True
            Exit For
       End If
   Next objProperty
   
   objDSO.Close
End Function

测试

下面的代码由用户选择工作簿,测试工作簿中是否具有名为MyTestBook的属性,如果是,则弹出下图3所示的消息。

代码语言:javascript
复制
Sub testFileHasSomeProperty()
   Dim vFileNames As Variant
   Dim i As Long
   Dim strPropertyName As Variant
   
   vFileNames = Application.GetOpenFilename("Excel工作簿(*.xls*), *.xls*", , "选择工作簿", , True)
   If Not IsArray(vFileNames) Then Exit Sub
   
   strPropertyName = "MyTestBook"
   
   For i = LBound(vFileNames) To UBound(vFileNames)
       If FileHasSomeProperty(vFileNames(i), strPropertyName) Then
            MsgBox "具有特定标识的工作簿存在!"
       End If
   Next i
End Sub

如果所选工作簿具有指定的属性,则弹出下图3所示的消息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档