Как определить версию excel vba

Распознавание числовых значений в начале текстовых строк с помощью функции Val в коде VBA Excel. Определение текущей версии приложения Excel.

Val — это функция, которая распознает цифры с начала строки и до первого нецифрового символа, и возвращает их как числовое значение соответствующего типа.

Синтаксис

string — строка; переменная или выражение, возвращающие строку.

Примечание

Функция Val прекращает чтение строки на первом символе, который она не может распознать как цифру. Если среди цифр встречаются точки (.), то первая интерпретируется как десятичный разделитель, а вторая — уже как текст, на ней распознавание числа прекращается.

Примеры

Примеры с функцией Val

Sub Primer()

    MsgBox Val(«15 2 .3   38 попугаев»)  ‘Результат: 152,338

    MsgBox Val(«15.03.2022»)  ‘Результат: 15,03

    MsgBox Val(«.03.2022»)  ‘Результат: 0,03

    MsgBox Val(«Моя дата: 15.03.2022»)  ‘Результат: 0

    MsgBox Val(«+7 900 000 11 22»)  ‘Результат: 79000001122

    MsgBox Val(«+7(900)000-11-22»)  ‘Результат: 7

    MsgBox Val(«-7-900-000-11-22»)  ‘Результат: -7

End Sub

Определение версии Excel

Определение текущей версии приложения Excel из кода VBA с помощью функций Application.Version и Val:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

Sub ВерсияПриложения()

Dim a As String

Select Case Val(Application.Version)

    Case Is = 9

        a = » (Excel 2000)»

    Case Is = 10

        a = » (Excel 2002)»

    Case Is = 11

        a = » (Excel 2003)»

    Case Is = 12

        a = » (Excel 2007)»

    Case Is = 14

        a = » (Excel 2010)»

    Case Is = 15

        a = » (Excel 2013)»

    Case Is = 16

        a = » (Excel 2016)»

    Case Is = 17

        a = » (Excel 2019)»

    Case Is < 9

        a = » (старее Excel 2000)»

    Case Is > 17

        a = » (новее Excel 2019)»

    Case Else

        a = «»

End Select

MsgBox «Версия приложения « & Application.Version & a

End Sub

Здесь функция Val необходима из-за того, что функция Application.Version возвращает номер версии приложения в текстовом формате:


Определение используемой версии Excel — Процедуры — VBA — Готовые решения$ — Мир MS Excel

Определение используемой версии Excel

http://www.cyberforum.ru/vba/thread1851214.html

Sub Bitnost()

MsgBox «Welcome to Microsoft Excel version » & _

Application.Version & » running on » & _

Application.OperatingSystem & «!»

End Sub

11.12.2013, 17:27

[ Файл-пример (59.0 Kb) ]

Для определения текущей версии Excel используйте такой код:

Sub Version()  

Dim Ver as String  

 Select Case Val(Application.Version)  

 Case Is <= 8: Ver = «Microsoft Excel 20-го века»  

 Case 9: Ver = «Microsoft Excel 2000»  

 Case 10: Ver = «Microsoft Excel 2002»  

 Case 11: Ver = «Microsoft Excel 2003»  

 Case 12: Ver = «Microsoft Excel 2007»  

 Case 14: Ver = «Microsoft Excel 2010»  

 Case 15: Ver = «Microsoft Excel 2013»  

 Case 16: Ver = «Microsoft Excel 2016»  

 Case Else: Ver = «Версия не определена»  

 End Select  

 MsgBox «Вы работаете в » & Ver  

End Sub  

Добавил: Serge_007 |

The major and minor version of an office application can be found using Application.Version.

Return examples:

15.0 = Office 2013
12.0 = Office 2007

I require the revision and build version of the office application, example:

Microsoft Office PowerPoint 2007 Original: major.minor: 12.0 revision.build: 4518.1014

Microsoft Office PowerPoint 2007 SP2: major.minor: 12.0 revision.build: 6425.1000

Question: Is there a way of finding the revision and build version of an office application, using VBA?

Question updated: Naming convention mistake on my side — Looking for the revision and build version of an office application, not the minor version.

asked Jul 30, 2015 at 8:14

HvS's user avatar

HvSHvS

5041 gold badge15 silver badges22 bronze badges

2

VBA does not have a function to do it directly, you will have to write a function to do it:

Public Sub test()
    Dim version As String
    Dim chkref As Object

    ' List of references
    For Each chkref In ThisWorkbook.VBProject.References
        version = RetrieveDllVersion(chkref.fullpath)
        major = RetrievePart(version, 0)
        majorup = RetrievePart(version, 1)
        minor = RetrievePart(version, 2)
        minorup = RetrievePart(version, 3)

        MsgBox chkref.Name & " : " & major & "." & majorup & "." & minor & "." & minorup
    Next
End Sub

Private Function RetrieveDllVersion(ByVal dll As String) As String
  Dim fso As Object 'Scripting.FileSystemObject
  Set fso = CreateObject("Scripting.FileSystemObject")
  RetrieveDllVersion = fso.GetFileVersion(dll)
End Function

Private Function RetrievePart(ByVal version As String, ByVal pos As Integer) As String
    RetrievePart = Split(version, ".")(pos)
End Function

Filter Excel / Office / Word on the chkref.name

HvS's user avatar

HvS

5041 gold badge15 silver badges22 bronze badges

answered Jul 30, 2015 at 9:46

Maxime Porté's user avatar

Maxime PortéMaxime Porté

1,0348 silver badges13 bronze badges

1

Summary of alternatives :

Application.Version                                             "16.0"
Application.Build                                               "16.0.8431"
Application.BuildFull                                           "16.0.8431.0"

CreateObject("Scripting.FileSystemObject") _
    .GetFileVersion(Application.Path & "WINWORD.exe")          "16.0.8431.2280"

answered Aug 2, 2018 at 17:18

Slai's user avatar

SlaiSlai

21.8k5 gold badges43 silver badges52 bronze badges

1

GenaY

383 / 209 / 5

Регистрация: 29.05.2013

Сообщений: 337

1

20.11.2013, 00:50. Показов 5922. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте.
Заполняю создаю и заполняю данными Excel файл из Access с помощью кода:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim Эксель, Книга, Лист As Object
Set Эксель = CreateObject("Excel.Application")
Set Книга = Эксель.Workbooks.Add("C:TestXltШаблон.xlt")
Set Лист = Книга.Sheets(1)
 
'Дальше, что то похожее на это только длиннее и скучнее:
Лист.Cells(1, 1) = 1 
Лист.Cells(2, 1) = 2 
Лист.Cells(3, 1) = 3
Лист.Cells(4, 1) = 4
 
'Сохраняю все в файл
Книга.SaveAs "C:TestXlsРезультат.xls"
 
'Закрываю Excel 
    If Not (Эксель Is Nothing) Then
        Эксель.Quit
        'Эксель.Visible = True 'если нужно увидеть что получилось сразу
        Set Лист = Nothing
        Set Книга = Nothing
        Set Эксель = Nothing
    End If

Может кто знает, как из VBA узнать версию Exсel у объекта Excel.Application
Мне в зависимости от версии Exсel 2003 или Exсel 2010 по разному заполнять файл нужно.



0



mobile

Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.11.2013, 02:07

2

Цитата
Сообщение от GenaY
Посмотреть сообщение

Может кто знает, как из VBA узнать версию Exсel у объекта Excel.Application
Мне в зависимости от версии Exсel 2003 или Exсel 2010 по разному заполнять файл нужно.

Свойство Version переменной типа Excel.Application:

Visual Basic
1
debug.print Эксель.Version



1



Серж_87

20.11.2013, 18:59

Не по теме:

Вопроса темы не касается…

Цитата
Сообщение от GenaY
Посмотреть сообщение

Dim Эксель, Книга, Лист As Object

разве в ВБА так прокатит? по по-моему каждую отдельно нужно писать
Dim Эксель As Object
Dim Книга As Object
Dim Лист As Object



1



Эксперт MS Access

26777 / 14456 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

20.11.2013, 19:20

4

Лучший ответ Сообщение было отмечено как решение

Решение

Так, конечно, очень неаккуратно. Но пройдет, поскольку переменная с необъявленным типом будет иметь тип Variant, который может принимать любые типы.
Но вы,emenem97, правы еще и в том смысле, что ТС видимо не точно знает как объявлять типы в ВБА.

Каждой

переменной следует объявлять тип по отдельности, групповые назначения (одно на строку) не катят.



3



GenaY

383 / 209 / 5

Регистрация: 29.05.2013

Сообщений: 337

20.11.2013, 20:42

 [ТС]

5

Цитата
Сообщение от mobile
Посмотреть сообщение

Так, конечно, очень неаккуратно. Но пройдет, поскольку переменная с необъявленным типом будет иметь тип Variant, который может принимать любые типы.
Но вы,emenem97, правы еще и в том смысле, что ТС видимо не точно знает как объявлять типы в ВБА.

Каждой

переменной следует объявлять тип по отдельности, групповые назначения (одно на строку) не катят.

В VB прокатывало. Исправлю конечно же.

Visual Basic
1
Dim Эксель As Object, Книга As Object, Лист As Object



0



1300 / 506 / 63

Регистрация: 09.08.2012

Сообщений: 2,056

20.11.2013, 20:44

6

Цитата
Сообщение от GenaY
Посмотреть сообщение

В VB прокатывало

на сколько я знаю в VBA и VB6 это не прокатит. А в VB.net можно



0



Для определения текущей версии Excel используйте такой код:

Sub Excel_Version()
    Dim Ver As String
        Select Case Val(Application.Version)
        Case Is <9: Ver = "Microsoft Excel 20-го века"
        Case 9: Ver = "Microsoft Excel 2000"
        Case 10: Ver = "Microsoft Excel 2002"
        Case 11: Ver = "Microsoft Excel 2003"
        Case 12: Ver = "Microsoft Excel 2007"
        Case 14: Ver = "Microsoft Excel 2010"
        Case 15: Ver = "Microsoft Excel 2013"
        Case 16: Ver = "Microsoft Excel 2016"
        Case 17: Ver = "Microsoft Excel 2019"
        Case 18: Ver = "Microsoft Excel 2021"
        Case Else: Ver = "Версия не определена"
        End Select
    MsgBox "Вы работаете в " & Ver
End Sub

Понравилась статья? Поделить с друзьями:
  • Как определить вероятность в excel
  • Как округлить сумму чисел в excel
  • Как определить в ячейке excel формула или данные
  • Как округлить сумму до целых в excel
  • Как определить в excel целое число или нет