В 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.