Распознавание числовых значений в начале текстовых строк с помощью функции 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
‘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
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
5041 gold badge15 silver badges22 bronze badges
answered Jul 30, 2015 at 9:46
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
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 Метки нет (Все метки)
Здравствуйте.
Может кто знает, как из VBA узнать версию Exсel у объекта Excel.Application
0 |
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
20.11.2013, 02:07 |
2 |
|||
Может кто знает, как из VBA узнать версию Exсel у объекта Excel.Application Свойство Version переменной типа Excel.Application:
1 |
Серж_87 |
20.11.2013, 18:59
|
Не по теме: Вопроса темы не касается…
Dim Эксель, Книга, Лист As Object разве в ВБА так прокатит? по по-моему каждую отдельно нужно писать
1 |
26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
20.11.2013, 19:20 |
4 |
Сообщение было отмечено как решение Решение Так, конечно, очень неаккуратно. Но пройдет, поскольку переменная с необъявленным типом будет иметь тип Variant, который может принимать любые типы. Каждой переменной следует объявлять тип по отдельности, групповые назначения (одно на строку) не катят.
3 |
GenaY 383 / 209 / 5 Регистрация: 29.05.2013 Сообщений: 337 |
||||
20.11.2013, 20:42 [ТС] |
5 |
|||
Так, конечно, очень неаккуратно. Но пройдет, поскольку переменная с необъявленным типом будет иметь тип Variant, который может принимать любые типы. Каждой переменной следует объявлять тип по отдельности, групповые назначения (одно на строку) не катят. В VB прокатывало. Исправлю конечно же.
0 |
1300 / 506 / 63 Регистрация: 09.08.2012 Сообщений: 2,056 |
|
20.11.2013, 20:44 |
6 |
В 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