Microsoft Office 2010 VBA 的 Application 物件有蟲蟲嗎?

Microsoft Office 2010 VBA 的 Application 物件有蟲蟲嗎?

當使用 VBA 開發程式時,通常我們會把一些共用的功能寫到 Module 或寫成 Class 讓整系列的 Office  的 Application 成員都可以用。

例如要取得當下應用程式名稱,以及版本號、組建編號時我們會從 Application 這個物件下手,它是提供這些資訊的主要來源。

 

可是有些不太合理的事發生了,以下是我用 Office 2010 的觀察結果:

  1. Application.Name 屬性:
    1. Outlook 沒有傳回 Microsoft 這個字樣。
    2. 其他的 Office 產品都有加上 Microsoft 字樣。
  2. Application.Version 屬性:
    1. Outlook 傳回的是  Major、Minor、Revision、Build 的字串(14.0.0.6109)。
    2. 其餘都只傳回 Major 和 Minor(14.0)。
  3. Application.Build 屬性:
    1. Word 傳回的字串包括了 Major、Minor 及 Build,但無 Revision 。
    2. 其餘都只傳回 Build,但 PowerPoint 是用 String 傳回,其他是用 Long 傳回。
    3. Outlook 無 Build 屬性。
  4. 做個列表如下:
  Application.Name Application.Version Application.Build
Word Microsoft Word 14.0 14.0.6024(String
Excel Microsoft Excel 14.0 6106(Long
PowerPoint Microsoft PowerPoint 14.0 6026(String
Publisher Microsoft Publisher 14.0 6026(Long
OutLook Outlook(它沒有 Microsoft 字樣 ) 14.0.0.6109(它附加了 Build 且有 Revision 號碼) ---無 Build 屬性---
Access Microsoft Access 14.0 6024(Long

 

 

附圖為證:

image

 

 

因此有必要寫一個函式用在所有 Office 2010 產品下並用它來取得版本相關的資訊。

程式碼如下:


Function GetOfficeVersion() As String
    On Error Resume Next      '---預防讀取 Outlook 的 Build 時出錯---
    
    '---取得 Office 是 64 or 32 位元版本---
    #If Win64 Then
        bit = "64"
    #Else
        bit = "32"
    #End If
    
    '---從 Application 物件取出相關資訊---
    pName = Replace(Application.Name, "Microsoft ", "", 1, 1)
    pMajor = CLng(Split(Application.Version, ".")(0))
    pMinor = CLng(Split(Application.Version, ".")(1))
    pRevision = CLng(Split(Application.Version, ".")(2))
    
    If IsEmpty(pRevision) Then pRevision = 0
    pBuild = CLng(Split(Application.Version, ".")(3))   '---若為 Outlook 從這裡取得 Build---
    
    If pBuild = 0 Then '------------------------------------若非 Outlook 從這裡取得 Build---
        pBuild = CStr(Application.Build)
        If InStr(pBuild, ".") Then      '------------若內含小數點則取最右端小數點後的數據---
            pBuild = Right(pBuild, InStrRev(pBuild, ".") - 1)
        End If
    End If
    
    ver = pMajor & "." & pMinor & "." & pRevision & "." & pBuild
    GetOfficeVersion = pName & " (v" & ver & ") " & bit & "bit"
End Function

 

 

 

在各種 Office 產品下測試看看:


? GetOfficeVersion
Word (v14.0.0.6024) 64bit

? GetOfficeVersion
Excel (v14.0.0.6106) 64bit

? GetOfficeVersion
PowerPoint (v14.0.0.6026) 64bit

? GetOfficeVersion
Publisher (v14.0.0.6026) 64bit

? GetOfficeVersion
Outlook (v14.0.0.6109) 64bit

? GetOfficeVersion
Access (v14.0.0.6024) 64bit

? GetOfficeVersion
Visio (v14.0.0.6106) 64bit

 


ku3