Разрешение экрана vba excel

Ципихович Эндрю

1508 / 478 / 56

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

Сообщений: 8,008

1

Как программно узнать разрешение экрана

15.01.2012, 15:25. Показов 22048. Ответов 26

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


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

Здравствуйте

Visual Basic
1
2
3
MsgBox$ _
            "Экран Вашего монитора имеет разрешение: " & GetSystemMetrics(0&) & "x" & GetSystemMetrics(1&) & vbCrLf & _
                                                       "Размер Вашего монитора: " & Application.UsableWidth & "x" & Application.UsableHeight, vbExclamation, "Информация"

Всё условно, реальный размер экрана монитора узнать можно?, у меня отображает MsgBox разрешение 1024*768, размер 769*529
А реально размер монитора — 370*305



0



Апострофф

Заблокирован

16.01.2012, 07:39

2

Не по теме:

Ципихович Эндрю, а вес монитора Вас не интересует:D
Для получения подобной инфы, мне кажется, нужна база по производителям, маркам и т.д. и т.п.
Возможно, я ошибаюсь?

Добавлено через 36 минут

Visual Basic
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
Option Explicit
Private Const LOGPIXELSX = 88 ' Logical pixels/inch in X
Private Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
Private Const HORZRES = 8 ' Horizontal width in pixels
Private Const VERTRES = 10 ' Vertical width in pixels
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDc As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
Public Sub usbGetFormSize()
Dim x As Variant
Dim y As Variant
Dim hDc As Long, lngRetVal As Long
Dim varScreenX As Variant, varScreenY As Variant
Dim varPixToInchX As Variant, varPixToInchY As Variant
hDc = GetDC(0)
'Get the Screen size in pixels for X & Y
varScreenX = GetDeviceCaps(hDc, HORZRES)
varScreenY = GetDeviceCaps(hDc, VERTRES)
'Get the conversion of pixels/inch for X & Y
varPixToInchX = GetDeviceCaps(hDc, LOGPIXELSX)
varPixToInchY = GetDeviceCaps(hDc, LOGPIXELSY)
'Convert to миллиметры.
x = varScreenX / varPixToInchX * 25.4
y = varScreenY / varPixToInchY * 25.4
End Sub

Существует вот такой подход к решению,
но доверять ему я бы не стал!



3



1702 / 189 / 19

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

Сообщений: 281

16.01.2012, 10:41

3

Цитата
Сообщение от Апострофф
Посмотреть сообщение

Для получения подобной инфы, мне кажется, нужна база по производителям, маркам и т.д. и т.п.

Привет, Володь. Все гораздо проще. Рулетки будет достаточно:-) Производители часто неверно указывают параметры своих изделий.



0



6644 / 1511 / 169

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

Сообщений: 4,298

16.01.2012, 17:03

4

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

Производители часто неверно указывают параметры своих изделий

как на коробках 0,25 Вт акустики пишут 300 Вт !!!



0



1508 / 478 / 56

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

Сообщений: 8,008

16.01.2012, 20:01

 [ТС]

5

270*203 — неутешительно, против

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

А реально размер монитора — 370*305



0



Dragokas

16.01.2012, 20:12

Не по теме:

AIDA64 как-то мАгёт (раздел монитор).



0



1508 / 478 / 56

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

Сообщений: 8,008

16.01.2012, 20:20

 [ТС]

7

может я не с того конца зашёл, тема такая есть на работе монитор 24″, широкоэкранный, сделаешь всё там, про формы говорю, делаю большими, домой придёшь, на 19″ не очень удобно. Вот программно инициализацию активацию формы хочу править- как лучше поступить?



0



gaw

16.01.2012, 20:53

Не по теме:

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

как лучше поступить

на работе — работать, а формы — дома, ну если конечно это Ваша работа — формы делать, тогда где то поменять монитор — самое то



0



Апострофф

Заблокирован

16.01.2012, 20:58

9

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

Вот программно инициализацию активацию формы хочу править- как лучше поступить?

Не с размеров экрана, а с разрешения надо начинать!

‘Get the Screen size in pixels for X & Y
varScreenX = GetDeviceCaps(hDc, HORZRES)
varScreenY = GetDeviceCaps(hDc, VERTRES)



0



1508 / 478 / 56

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

Сообщений: 8,008

16.01.2012, 21:12

 [ТС]

10

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

разрешение 1024*768

и что это даёт?
есть разрешение монитора, есть форма, как её ужимать правильно, до каких пределов?



0



1508 / 478 / 56

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

Сообщений: 8,008

18.01.2012, 05:17

 [ТС]

11

апну тему

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

и что это даёт?
есть разрешение монитора, есть форма, как её ужимать правильно, до каких пределов?



0



Апострофф

Заблокирован

18.01.2012, 10:30

12

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

реальный размер экрана монитора узнать можно?

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

AIDA64 как-то мАгёт (раздел монитор).

Нашел полный список констант для GetDeviceCaps — всё оказалось до смешного просто
Но по прежнему врёт!

Visual Basic
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Option Explicit
 
Private Const DRIVERVERSION  As Long = 0     'Версия драйвера
Private Const TECHNOLOGY     As Long = 2     'Классификация устройства
 
Private Const HORZSIZE       As Long = 4     '!!!Размер по горизонтали в мм.
Private Const VERTSIZE       As Long = 6     '!!!Размер по вертикали в мм.
 
Private Const HORZRES        As Long = 8     'Размер по горизонтали в точках
Private Const VERTRES        As Long = 10    'Размер по вертикали в точках
Private Const BITSPIXEL      As Long = 12    'Кол-во бит на точку
Private Const PLANES         As Long = 14    'Number of planes
Private Const NUMBRUSHES     As Long = 16    'Number of brushes the device has
Private Const NUMPENS        As Long = 18    'Number of pens the device has
Private Const NUMMARKERS     As Long = 20    'Number of markers the device has
Private Const NUMFONTS       As Long = 22    'Number of fonts the device has
Private Const NUMCOLORS      As Long = 24    'Макс. кол-во возможных цветов
Private Const PDEVICESIZE    As Long = 26    'Size required for device descripto
Private Const CURVECAPS      As Long = 28    'Curve capabilities
Private Const LINECAPS       As Long = 30    'Line capabilities
Private Const POLYGONALCAPS  As Long = 32    'Polygonal capabilities
Private Const TEXTCAPS       As Long = 34    'Text capabilities
Private Const CLIPCAPS       As Long = 36    'Clipping capabilities
Private Const RASTERCAPS     As Long = 38    'Bitblt capabilities
Private Const ASPECTX        As Long = 40    'Length of the X leg
Private Const ASPECTY        As Long = 42    'Length of the Y leg
Private Const ASPECTXY       As Long = 44    'Length of the hypotenuse
Private Const SHADEBLENDCAPS As Long = 45    'Shading and blending caps (IE5)
Private Const LOGPIXELSX     As Long = 88    'Logical pixels/inch in X
Private Const LOGPIXELSY     As Long = 90    'Logical pixels/inch in Y
Private Const SIZEPALETTE    As Long = 104   'Number of entries in physical palette
Private Const NUMRESERVED    As Long = 106   'Number of reserved entries in palette
Private Const COLORRES       As Long = 108   'Количество цветов
Private Const VREFRESH       As Long = 116   'Текущий рефрешь по вертикали в Гц
                                             '(только для монитора)
Private Const DESKTOPVERTRES As Long = 117   'Размер десктопа по горизонтали
Private Const DESKTOPHORZRES As Long = 118   'Размер десктопа по вертикали
Private Const BLTALIGNMENT   As Long = 119   'Preferred blt alignment
 
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
Public Sub ScreenSize()
MsgBox GetDeviceCaps(GetDC(0), 4) & " X " & GetDeviceCaps(GetDC(0), 6) & " mm"
End Sub



2



6169 / 934 / 309

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

Сообщений: 1,359

Записей в блоге: 1

18.01.2012, 11:27

13

Цитата
Сообщение от Апострофф
Посмотреть сообщение

Нашел полный список констант для GetDeviceCaps — всё оказалось до смешного просто
Но по прежнему врёт!

У меня практически не врет, измерил линейкой, расхождение в пару милиметров.
Только не понятно, зачем нужен именно размер в миллиметрах, когда нужно ориентироваться на разрешение экрана.
Какая разница 17 или 22 дюймовый монитор, если разрешение экрана и там и там 1024х768 и форма одинаково будет смотрется на обоих мониторах (относительно других объектов)



0



gaw

6644 / 1511 / 169

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

Сообщений: 4,298

18.01.2012, 11:45

14

Visual Basic
1
2
3
4
5
6
Private Sub Form_Load()
k = 0.5
Me.Width = k * Screen.Width
Me.Height = k * Screen.Height
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
End Sub



2



Апострофф

Заблокирован

18.01.2012, 14:49

15

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

Me.Width = k * Screen.Width
Me.Height = k * Screen.Height
Me.Move (Screen.Width — Me.Width) / 2, (Screen.Height — Me.Height) / 2
End Sub

Идея понятна, но в VBA нет объекта Screen,
да и все контролы на форме тоже надо масштабировать.
Всё это уже делалось неоднократно, но у ТС проблемы с поиском, кажется



1



6644 / 1511 / 169

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

Сообщений: 4,298

18.01.2012, 16:38

16

Цитата
Сообщение от Апострофф
Посмотреть сообщение

Идея понятна, но в VBA нет объекта Screen

виноват, — исправлюсь ==> это Ципихович Ендрю наверное онлайн гипнозом обладает



0



Ципихович Эндрю

1508 / 478 / 56

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

Сообщений: 8,008

18.01.2012, 19:11

 [ТС]

17

Цитата
Сообщение от m-ch
Посмотреть сообщение

Только не понятно, зачем нужен именно размер в миллиметрах, когда нужно ориентироваться на разрешение экрана.

так я и спрашиваю как? знаю разрешение, как далее считать?

Цитата
Сообщение от Апострофф
Посмотреть сообщение

MsgBox GetDeviceCaps(GetDC(0), 4) & » X » & GetDeviceCaps(GetDC(0), 6) & » mm»

выдаёт 380*285 против

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

А реально размер монитора — 370*305

ну более мене похоже на правду, замерю завтра у других

Добавлено через 5 минут
Апострофф, зачем людей пугать если хватает этого:

Visual Basic
1
2
3
4
5
6
7
8
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
 
Public Sub ScreenSize()
 
    MsgBox GetDeviceCaps(GetDC(0), 4) & " X " & GetDeviceCaps(GetDC(0), 6) & " mm"
 
End Sub

я имею ввиду — константы для общего развития?



0



126 / 1 / 1

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

Сообщений: 80

01.01.2013, 22:45

18

Столкнулась с такой же проблемой как и автор темы.

Но так и не вижу решения.
Мне тоже надо определить разрешение экрана, но без «user32».
Помогите



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

01.01.2013, 23:40

19

Не хотите «user32» (почему?!) — используйте WMI (это медленнее)

Visual Basic
1
2
3
4
5
6
7
8
With GetObject("winmgmts:\.rootcimv2")
    For Each x In .ExecQuery("Select * From Win32_DisplayConfiguration")
        MsgBox "Horizontal resolution: " & x.PelsWidth
        MsgBox "Vertical resolution: " & x.PelsHeight
        MsgBox "Name: " & x.DeviceName
        MsgBox "Color depth: " & x.BitsPerPel
    Next
End With

Утянуто с http://blogs.technet.com/b/hey… puter.aspx и слегка переработано



2



126 / 1 / 1

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

Сообщений: 80

02.01.2013, 00:17

20

Цитата
Сообщение от Казанский
Посмотреть сообщение

Не хотите «user32» (почему?!) — используйте WMI (это медленнее)[

на 64-битной системе все эти библиотеки не работают.
Ваш пример заработал, спасибо



0



ExcelYou may develop an Excel application that needs to adjust itself depending on the video resolution of the user. For

example, you might have an application that requires a certain range to show so you’ll need to adjust Excel’s zoom factor.

Here is a way by using GetSystemMetrics API function of windows :

CODE :

Declare Function GetSystemMetrics32 Lib "User32" Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long 

Sub DisplayScreenResolution() 
    Dim lngWidth            As Long
    Dim lngHeight           As Long    

    lngWidth = GetSystemMetrics32(0) ' width in points
    lngHeight = GetSystemMetrics32(1) ' height in points

    MsgBox Format(lngWidth, "#,##0") & " x " & Format(lngHeight, "#,##0"), vbInformation, "Screen Resolution (width x height)"
    
End Sub

What is Display Resolution?

The number of Pixels displayed in your Monitor is called Screen Resolution.

It is represented as how many Pixels displayed in Screen height x Screen width. To get the screen height and width use these codes as per your programming language. The computer or mobile devices do not have standard screen resolutions.

It varies with every manufacturer and every computer model. So, the developers have to design their application to be compatible with the user’s device resolution limits.

Be it an application developer or a Web developer, everyone have to use any of these codes at some point of time.

1. What is my Screen Resolution? – VBA using Windows API

The VBA code below retrieves screen resolution parameters using 2 different methods, both using the Win api functions.

Option Explicit
'For Method 1
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
'For Method 2
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1

Private Sub VBA_Screen_Resolution()
    'Method 1
    Dim rScreen As RECT
    GetClientRect CLng(GetDesktopWindow()), rScreen
    ThisWorkbook.Sheets(1).Cells(1, 1) = "Left"
    ThisWorkbook.Sheets(1).Cells(2, 1) = "Right"
    ThisWorkbook.Sheets(1).Cells(3, 1) = "Top"
    ThisWorkbook.Sheets(1).Cells(4, 1) = "Bottom"
    
    ThisWorkbook.Sheets(1).Cells(1, 2) = rScreen.Left
    ThisWorkbook.Sheets(1).Cells(2, 2) = rScreen.Right
    ThisWorkbook.Sheets(1).Cells(3, 2) = rScreen.Top
    ThisWorkbook.Sheets(1).Cells(4, 2) = rScreen.Bottom
    
    'Method 2
    MsgBox "Screen Resolution - " & GetSystemMetrics(SM_CXSCREEN) & " x " & GetSystemMetrics(SM_CYSCREEN)

End Sub

Note: Function used in method 2 in above example can be used in C Programming to get screen width & height. Include Windows.h and then use the function with same parameters in your C program.

2. Get Display resolution in Javascript

It is easy to get screen width and height with Javascript. You just need to use the ‘Screen’ Object as in below code sample.

var wscr = “Screen Width: “ + screen.width
var hscr = “Screen Height: “ + screen.height
var awscr = “Screen Width excluding Taskbar: “ + screen.availWidth
var ahscr = “Screen Width excluding Taskbar: “ + screen.availHeight

The above can be tested right from your internet browser Firefox, Chrome or IE. To test it in Firefox, press Ctrl + Shift + q, then choose ‘Console’. Type this command ‘console.log (wscr);’ and press enter.

Firefox console will display the screen width.

3. Find Windows Screen Height & Width from Command Prompt

Open command prompt and type this command. Just so simplest of all.

wmic desktopmonitor get screenheight, screenwidth
'Or this command to open the windows screen resolution display settings.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3

By now you would be able to answer ‘What is Display resolution’ of your computer using the above free codes. If you require the coding in any specific programming language, please leave us a comment.

Вставь этот код в новый программный модуль (а не в модуль листа или книги, как ты делал это раньше)

Код:

Declare Function GetSystemMetrics Lib «user32.dll» (ByVal nIndex As Long) As Long

Const SM_CXSCREEN = 0, SM_CYSCREEN = 1

Private Sub Workbook_Open()

x = GetSystemMetrics(SM_CXSCREEN)

y = GetSystemMetrics(SM_CYSCREEN)

MsgBox «Разрешение экрана » & x & » * » & y

End Sub

Пиксели и твипы на VBA

https://www.programmersforum.ru/showthread.php?t=208444

Цитата:

вытащил GetDeviceCaps(hDC, HORZRES)=1024, a GetDeviceCaps(hDC, VERTRES)=768[/SIZE]!
Это размеры дисплея?

Цитата:

Но в каких единицах измерения выдаваемые числа?

Цитата:

В каких единицах измерения задаются UserForm1.Top, UserForm1.Left, UserForm1.Height, UserForm1.Width?

Цитата:

Как все эти понятия (пиксели, поинты, твипы и DPI) связаны друг с другом?

Яндекс вам в помощь, в этом вопросе
А нафига вам это всё?
Для вывода формы в нужном месте экрана всё это вроде как не требуется.

Цитата:

дабы закрыть от пользователя нижнее Window’ое меню с кнопкой пуск и вкладку Excel’я с листами

зачем так извращаться?
Полностью скрыть или отобразить панель задач Windows можно через WinAPI
(по сути, это то же самое окно, которому можно послать любую команду),
и делается это совсем несложно:
http://www.cyberforum.ru/vb-net/thread450625.html

How can you access the dimensions of the screen in Visual Basic? I have looked online and it says to use Screen.width and Screen.length, but it doesn’t recognize those properties… any tips?

asked Oct 21, 2011 at 1:46

Monkeyanator's user avatar

MonkeyanatorMonkeyanator

1,3482 gold badges14 silver badges29 bronze badges

In VB you can use Screen.Width and Screen.Height. They’re not in VBA but you can use an API call instead. Add these declarations:

Public Declare Function GetSystemMetrics Lib "user32.dll" (ByVal index As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1

Then use like so:

MsgBox GetSystemMetrics(SM_CXSCREEN) & "x" & GetSystemMetrics(SM_CYSCREEN)

answered Oct 21, 2011 at 1:59

Boann's user avatar

7

разрешение экрана и Экселя как соотнести?

Обитатель

Дата: Среда, 20.04.2016, 21:06 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

Добрый день.

хочу форму во всю ширину экрана сделать
но если цепляюсь за разрешение экрана то форма намного шире
цепляться за ширину экселя не правильно т.к. эксель может быть не на весь экран

на запрос в ВБА выдает
GetSystemMetrics(SM_CXSCREEN) выдает 1280
Application.Width выдает 972 (Эксель развернут)
zoom везде 100%
почему такая разница? как правильно развернуть?
или как альтернатива есть ли в форме свойство/метод аналогично как в эксле DisplayFullScreen

 

Ответить

al-Ex

Дата: Среда, 20.04.2016, 22:16 |
Сообщение № 2

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 190


Репутация:

59

±

Замечаний:
0% ±


Excel 2010

хочу форму во всю ширину экрана сделать

Вот учебный пример, посмотри.
Вот попроще пример, без API. А что касается соотношения между пикселями и принятыми в VBA поинтами,
вот пример:

К сообщению приложен файл:

FormFun.xls
(60.5 Kb)

Сообщение отредактировал al-ExЧетверг, 21.04.2016, 13:32

 

Ответить

Обитатель

Дата: Четверг, 21.04.2016, 19:08 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

соотношения между пикселями и принятыми в VBA поинтами

а зачем они нужны Поинты?
по вашему макросу выдало (сравните с первым постом)
пиксели поинты
Width 996 970,5
Height 820 636,75

[vba]

[/vba]
это максимизация а не фуллскрин

Сообщение отредактировал ОбитательЧетверг, 21.04.2016, 19:08

 

Ответить

al-Ex

Дата: Пятница, 22.04.2016, 02:56 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 190


Репутация:

59

±

Замечаний:
0% ±


Excel 2010

в VBA принято не пикселями опредедять размеры а поинтами, это не одно и то-же. Поэтому чтобы привязать размер формы к размеру экрана монитора, сначала надо перевести пиксели в поинты, вот код:

Сообщение отредактировал al-ExПятница, 22.04.2016, 03:23

 

Ответить

Вывод разрешения монитора

Разрешение монитора просматривается и редактируется в окне свойств экрана (Пуск ? Настройка ? Панель управления ? Экран ? Параметры). Однако для просмотра разрешения можно написать соответствующий макрос (листинг 3.71). Чтобы определить разрешение монитора, следует использовать функцию Windows API GetSystemMetrics. В качестве единственного параметра она принимает номер системной настройки, значение которой необходимо узнать (в данном случае 0 – это ширина изображения, 1 – высота). Функция GetSystemMetrics возвращает численное значение запрашиваемого параметра.

Листинг 3.71. Разрешение монитора

‘ Объявление API-функции

Declare Function GetSystemMetrics Lib «user32» _

(ByVal nIndex As Long) As Long

‘ Константы, которые передаются в функцию для определения _

горизонтального и вертикального размеров изображения

Const SM_CXSCREEN = 0

Const SM_CYSCREEN = 1

Sub GetMonitorResolution()

Dim lngHorzRes As Long

Dim lngVertRes As Long

‘ Получение ширины и высоты изображения на мониторе

lngHorzRes = GetSystemMetrics(SM_CXSCREEN)

lngVertRes = GetSystemMetrics(SM_CYSCREEN)

‘ Отображение сообщения

MsgBox «Текущее разрешение: » & lngHorzRes & «x» & lngVertRes

End Sub

После того как запущен макрос (в окне выбора макросов он будет называться GetMonitorResolution), на экране отобразится окно, в котором будет показано текущее разрешение монитора.

Понравилась статья? Поделить с друзьями:
  • Разработка макроса для excel
  • Разработка калькулятора в excel
  • Разработка запросов к базе данных в excel
  • Разработка диаграмм в excel
  • Разработка дашбордов в excel