Изучение различных методов получения версии приложения с помощью VBA

В VBA (Visual Basic для приложений) получение версии приложения может быть полезно для различных целей, таких как отслеживание совместимости, выполнение операций, зависящих от версии, или предоставление информации пользователю. В этой статье блога мы рассмотрим несколько методов, которые можно использовать для получения версии приложения, на примерах кода VBA. Давайте погрузимся!

Метод 1: использование свойства Application.Version
Пример кода:

Sub GetApplicationVersion()
    Dim appVersion As String
    appVersion = Application.Version
    MsgBox "Application Version: " & appVersion
End Sub

Метод 2: чтение из пользовательских свойств
Пример кода (Excel):

Sub GetExcelVersion()
    Dim appVersion As String
    appVersion = ThisWorkbook.BuiltinDocumentProperties("Version").Value
    MsgBox "Excel Version: " & appVersion
End Sub

Пример кода (Word):

Sub GetWordVersion()
    Dim appVersion As String
    appVersion = ActiveDocument.BuiltinDocumentProperties("Version").Value
    MsgBox "Word Version: " & appVersion
End Sub

Метод 3: использование функций API (только для Windows)
Пример кода:

Declare Function GetFileVersionInfo Lib "version.dll" Alias "GetFileVersionInfoA" _
    (ByVal lptstrFilename As String, ByVal dwHandle As Long, _
    ByVal dwLen As Long, lpData As Any) As Long

Declare Function GetFileVersionInfoSize Lib "version.dll" Alias "GetFileVersionInfoSizeA" _
    (ByVal lptstrFilename As String, lpdwHandle As Long) As Long

Declare Function VerQueryValue Lib "version.dll" Alias "VerQueryValueA" _
    (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Sub GetApplicationVersion()
    Dim filePath As String
    Dim fileVersion As String
    filePath = Application.Path & "\" & Application.Name
    fileVersion = GetFileVersion(filePath)
    MsgBox "Application Version: " & fileVersion
End Sub
Function GetFileVersion(ByVal filePath As String) As String
    Dim dwHandle As Long
    Dim dwLen As Long
    Dim lpData As String
    Dim lpBuffer As String
    Dim puLen As Long

    dwLen = GetFileVersionInfoSize(filePath, dwHandle)
    If dwLen > 0 Then
        lpData = Space(dwLen)
        GetFileVersionInfo filePath, 0&, dwLen, lpData
        VerQueryValue ByVal lpData, "\", ByVal lpBuffer, puLen
        GetFileVersion = Mid$(lpBuffer, 1, puLen)
    Else
        GetFileVersion = ""
    End If
End Function

Метод 4: анализ ключей реестра
Пример кода (Excel):

Sub GetExcelVersion()
    Dim appVersion As String
    appVersion = GetRegistryValue("HKEY_CLASSES_ROOT\Excel.Application\CurVer\")
    MsgBox "Excel Version: " & appVersion
End Sub
Function GetRegistryValue(ByVal regKey As String) As String
    Dim objShell As Object
    Dim regValue As String
    On Error Resume Next

    Set objShell = CreateObject("WScript.Shell")
    regValue = objShell.RegRead(regKey)
    GetRegistryValue = Right(regValue, Len(regValue) - InStrRev(regValue, "."))
End Function

Пример кода (Word):

Sub GetWordVersion()
    Dim appVersion As String
    appVersion = GetRegistryValue("HKEY_CLASSES_ROOT\Word.Application\CurVer\")
    MsgBox "Word Version: " & appVersion
End Sub
' GetRegistryValue function remains the same as in the Excel example.

В этой статье мы рассмотрели несколько способов получения версии приложения с помощью VBA. Мы научились использовать встроенные свойства, считывать пользовательские свойства документа, использовать функции Windows API и анализировать ключи реестра. В зависимости от конкретных требований вашего проекта VBA и приложения, с которым вы работаете, вы можете выбрать наиболее подходящий метод. Используя эти методы, вы можете улучшить функциональность и совместимость ваших приложений VBA.