有時候,需要使用代碼確認某個工作簿是否是特定模板創建,或者是否屬于某個應用程序,如果是就打開并操作該工作簿或應用程序。如何實現呢?
一種常用的方法是對工作簿文件添加自定義的文檔屬性,這樣讓代碼在不打開工作簿的情況下判斷是否是想要的工作簿。
為工作簿添加自定義文檔屬性
單擊“文件——信息——屬性——高級屬性”,打開工作簿的“屬性”對話框。選取“自定義”選項卡,在名稱文本框中輸入屬性名稱,示例中是“MyTestBook”,在類型下拉列表中選擇“是或否”,選取取值選項按鈕中的“是”,單擊“添加”按鈕,如下圖1所示,為該工作簿添加自定義文檔屬性。
圖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