Страницы: 1
RSS
Вопрос касательно функции CONST в VBA Excel, Не могу поймать разницу между константой и переменной
 
Уважаемые знатоки!

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


Код
Sub Test()
Dim Pi as Double
Pi=3.1415 
MsgBox Pi
End Sub

Код
Sub Test() 
CONST Pi as Double = 3.1415 
MsgBox Pi 
End Sub
В обоих случаях я могу испольховать слово Pi в коде, и он будет понимать его как 3,1415, тогда какой резон обьявлять константу?
Изменено: Самир Мамедов - 11.05.2016 07:47:32
 
Из первой ссылки из Яндекса:
Константы VBA – это по сути те же переменные, но тут происходит присвоение значения один раз. Если вы присвоите константе значение 100, то изменить его уже не сможете.

Вас Яндекс/Гугл забанил, или F1 не работает? :D
Изменено: Ivan.kh - 11.05.2016 08:44:09
 
ТО есть как это не смогу? А если в начале кода поменяю константу на другую цифру?
 
Цитата
Самир Мамедов написал:
тогда какой резон обьявлять константу?
константы нужны для удобства программиста.
Разница между константой и переменной только в том, что в константу записывает данные программист во время написания кода макроса и макрос не может записать данные в константу. А в переменную может записать данные и программист, и макрос.
Можете всегда использовать переменные, но когда-нибудь может быть Вы поймете, что в данном случае удобнее использовать константу.
 
Цитата
Самир Мамедов написал:
ТО есть как это не смогу?
вот так не сможете ;)
Код
Sub Test()
    Const Pi As Double = 3.1415
    Pi = Pi + 1
    MsgBox Pi
End Sub

а так можно
Код
Sub Test()
    Dim Pi As Double 
    Pi= 3.1415
    Pi = Pi + 1
    MsgBox Pi
End Sub
Изменено: Ivan.kh - 11.05.2016 09:27:05
 
А может быть непонимание заключается в том, что Пи= 3,1415926535897... (насколько я помню со школы), и поэтому округляя до десятитысячных, получим Пи= 3,1416 а не 3,1415 как рассматривается в теме...
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Ivan.Kh большое спасибо! Сейчас дошло!
 
Лучше всего константы подходят вместо задания каких-то числовых значений, например, при проверке условий, задании границ циклов и т.п.
Например, если вы в нескольких местах макроса проверяете If a < 50, то, при необходимости заменить 50 на 60, не нужно бегать по всему коду в поисках таких ограничений, а записать константу в начале макроса и прописывать например так:
Код
Const C_LIMIT as Double = 50
If a < C_LIMIT
F1 творит чудеса
 
Максим Зеленский, с таким же успехом можно и переменную использовать, никакой разницы нет.
 
Константы лучше всего использовать тогда, когда значение нужно назначить один раз внутри кода и дальше только считывать. А нужны они в данном случае, как правильно заметили - для удобства программиста. Например, есть у нас константа:
Код
Const lWBName_COL as Long = 5
В ней храним номер столбца, в который записывается имя книги. Так вот, в коде при записи мы неоднократно применяем эту самую константу, вместо того, чтобы каждый раз писать Cells(lr, 5). С одной стороны блаж - можно напрямую номер столбца писать. Но с другой стороны: а если расположение столбца с 5 надо поменять на другое значение? Что делать будем? Бегать по коду и менять везде? Или Ctrl+H(который может зацепить и что-то другое, где менять не надо)? А в случае с константой просто меняем номер у константы и радуемся.
Да, можно и переменные для этого применять. Но тут есть нюанс: в случае с переменной есть хоть крохотный, но шанс, что в ходе выполнения программы эта переменная будет либо обнулена, либо заменено значение, что повлечет ошибку логики выполнения. А если эта константа - то VBA уже на стадии компиляции скажет, что нельзя изменять значение констант. Плюс константы инициализируются один раз в момент компиляции, что несколько ускоряет обращение к ним из кода.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist - Большое спасибо что уделили внимание к моему маленькому вопросу и подробно все изложили. Теперь мне окончательно все ясно.  Мне даже стыдно стало как-то что заставил проффессионала так отписаться  
Страницы: 1
Читают тему
Наверх