标识并使用VBA代码识别特定的工作簿
发布网友
发布时间:2024-09-28 01:50
我来回答
共1个回答
热心网友
时间:2024-09-28 21:39
有时候,需要使用代码确认某个工作簿是否是特定模板创建,或者是否属于某个应用程序,如果是就打开并操作该工作簿或应用程序。如何实现呢?
一种常用的方法是对工作簿文件添加自定义的文档属性,这样让代码在不打开工作簿的情况下判断是否是想要的工作簿。
为工作簿添加自定义文档属性
单击“文件——信息——属性——高级属性”,打开工作簿的“属性”对话框。选取“自定义”选项卡,在名称文本框中输入属性名称,示例中是“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
标识并使用VBA代码识别特定的工作簿
一种常用的方法是对工作簿文件添加自定义的文档属性,这样让代码在不打开工作簿的情况下判断是否是想要的工作簿。为工作簿添加自定义文档属性 单击“文件——信息——属性——高级属性”,打开工作簿的“属性”对话框。选取“自定义”选项卡,在名称文本框中输入属性名称,示例中是“MyTestBook”,在类型...
如何利用VBA获取指定工作簿中的工作表名称
如果需要用VBA的方法获得某个工作簿中工作表的名称,可以使用下面的代码,其中使用了 Microsoft ActiveX Data Objects (ADO),可以将指定工作簿中的工作簿名称显示在A列中,在使用时需将代码中的工作簿名称及路径进行更改。Sub GetSheetNames()Dim objConn As Object Dim objCat As Object Dim tbl As...
如何用VBA代码检测已知工作簿是否打开
假设目标工作簿名称是 target.xls 代码是:Dim book As Workbook 承接你的程序 x = "target.xls"For Each book In Workbooks If book.Name = x Then MsgBox x & " 工作簿已经打开"goto 100 End If Next MsgBox x & " 工作簿并未打开"100:继续你的程序 由于不知 已打开 和 未打开 之后的...
VBA代码如何表示任意工作表
MsgBox "工作表<" & s & ">" & IIf(t, "", "不") & "存在。"'如果不存在,退出程序:If Not t Then Exit Sub '如果存在,并要使用这个工作表中的单元格 A1 的数据:Dim ss With Worksheets(s)ss = .Range("A1")MsgBox "工作表<" & s & ">中 单元格 A1 的值:" & ss E...
如何利用VBA获取指定工作簿中的工作表名称
Set wk = Workbooks.Open("D:\函数习题\第1章 函数基础.xls")For Each sh In Workbooks(2).Worksheets rw = rw + 1 ThisWorkbook.Sheets(1).Range("a" & rw) = sh.Name Next sh wk.Close True End Sub 新建一个工作簿,在VBA中新建一个模块,将上面的代码复制进去。记住要根据自己指定...
求在EXCEL VBA中打开指定工作薄的完整代码???
首先,确保你的Excel文件是支持宏的,通常情况下,将.XLSX文件另存为扩展名为.XLSM的文件。这一步将启用VBA功能。接着,按下键盘上的Alt + F11,这会快速带你进入Visual Basic for Applications (VBA) 环境。在VBA编辑器中,你会看到一个工作簿窗口。在VBA编辑器中,找到并双击工作簿标签,这会创建...
vba 打开固定地址下,指定名称的工作簿
如果只是打开文件,可以试试以下VBA代码Sub 打开文件()Dim wjm, lj1, lj2wjm = Sheets("Sheet1").Range("A1") & ".XLSM"lj1 = "E:\新建文件夹\" & wjmlj2 = "E:\keil\" & wjmIf Dir(lj1) <> "" Then '判断文件是否存在 Workbooks.Open Filename:=lj1Else MsgBox "文件...
excel用VBA另保存excel中特定的工作表
代码如下:sub 分开存为工作薄()dim sh as worksheetdim wk1 as workbookdim wk2 as workbookdim ipath as stringapplication.screenupdating = false ‘将屏幕更新关闭application.displayalerts = falseipath = thisworkbook.path & "\" '保存路径为当前工作簿所在路径set wk1 = workbooks.addse...
excel中通过vba如何在工作簿中寻找的工作表并使之成为当前工作表
'假设你的工作薄中有temp5个工作表 '例如5个,下面的程序你先看,选我为正确答案有问题可以问我哦 temp5=5 Windows(a).Activate For tempa = 1 To temp5 temp = Worksheets(1).Name If temp = asd Then Sheets(temp).Select End If next tempa ...
excel里面我想 用VBA实现调用另一个工作簿中的数据怎么解决
1、点击Excel界面左下角的录制宏按钮录制宏。2、在【宏名】处输入一个有意义的名称,帮助以后识别该宏的功能。本例按照默认名称命名。选择将宏录制在【个人宏工作簿】并点击【确定】按钮。3、马上点击Excel界面左下角的停止录制宏按钮停止宏的录制。4、按Alt+F11打开VBE界面,如下图。5、在代码部分...