标识并使用VBA代码识别特定的工作簿
时间:2022-02-05 17:21:20
有时候,需要使用代码确认某个工作簿是否是特定模板创建,或者是否属于某个应用程序,如果是就打开并操作该工作簿或应用程序。如何实现呢?
一种常用的方法是对工作簿文件添加自定义的文档属性,这样让代码在不打开工作簿的情况下判断是否是想要的工作簿。
为工作簿添加自定义文档属性
单击“文件——信息——属性——高级属性”,打开工作簿的“属性”对话框。选取“自定义”选项卡,在名称文本框中输入属性名称,示例中是“MyTestBook”,在类型下拉列表中选择“是或否”,选取取值选项按钮中的“是”,单击“添加”按钮,如下图1所示,为该工作簿添加自定义文档属性。
图1
安装工具库DSOFile.dll
我们要使用名为DSOFile.dll的COM对象从关闭的工作簿中读取文档属性,因此,需要下载并安装该DLL。可以在Microsoft的网站上下载:
下载后,双击安装。安装完毕后,选择VBE的菜单“工具——引用”命令,在“引用”对话框中找到并选取“DSO OLE Document Properties Reader 2.1”前的复选框,单击“确定”,如下图2所示。
图2
编写检查自定义文档属性的函数
下面的自定义函数FileHasSomeProperty用来检查指定的文件是否具有指定的文档属性,其中参数sFile接受指定的文件,参数sProperty接受指定文档属性名,如果sFile中具有名为sProperty的属性,则返回True,否则返回False。
‘检查指定文件是否具有特定的文档属性
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所示的消息。
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所示的消息。
图3
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
excel如何设置图表?
![](https://img.aspxhome.com/file/2023/1/36131_0s.jpg)
excel2016怎样自动添加数值单位?
![](https://img.aspxhome.com/file/2023/1/40311_0s.jpg)
如何利用word公式功能输入各类复杂的公式内容
![](https://img.aspxhome.com/file/2023/7/32987_0s.jpg)
批量调整Excel2003单元格大小
![](https://img.aspxhome.com/file/2023/4/38414_0s.jpg)
word怎么调换段落位置?
![](https://img.aspxhome.com/file/2023/2/34612_0s.gif)
在Word 2016中打印自己的贺卡?
![](https://img.aspxhome.com/file/2023/5/23125_0s.jpg)
Win10更新时候提示0x80004002错误代码怎么办?
![](https://img.aspxhome.com/file/2023/2/52812_0s.jpg)
删除现有Word文档页码的技巧
word如何设置正文行距
![](https://img.aspxhome.com/file/2023/2/35032_0s.png)
Excel VLOOKUP函数怎么查询一个值返回多个结果
![](https://img.aspxhome.com/file/2023/1/36471_0s.jpg)
在Word中格式刷的使用方法汇总
Win10更新系统之后启动VM虚拟机导致电脑蓝屏怎么办?
![](https://img.aspxhome.com/file/2023/2/50242_0s.png)
wps表格怎么快速输入性别
![](https://img.aspxhome.com/file/2023/3/53573_0s.jpg)
Word分隔符怎么删除?Word删除分页符且不影响页面设置的方法
![](https://img.aspxhome.com/file/2023/4/26224_0s.jpg)
word怎么合并多个文档?
![](https://img.aspxhome.com/file/2023/4/34394_0s.png)
Win10的主题壁纸文件夹在哪里?
![](https://img.aspxhome.com/file/2023/3/50983_0s.png)
Word中目录设置的操作方法
WORD邮件合并—批量生成带图片的植物生长习性卡片
win10怎么打开系统服务
![](https://img.aspxhome.com/file/2023/0/46510_0s.jpg)
WPS演示模仿QQ相册图片翻页怎么使用
![](https://img.aspxhome.com/file/2023/0/53530_0s.jpg)