Dzisiaj na Goldenline jeden kolega zapytał mnie o co chodzi z tym zwrotem Me w makrach i czy jego stosowanie jest obowiązkowe.
Moduł Makra
Temat jest ważny i myślę, że warto co nieco o nim napisać.
Otóż, znaczenie Me zależy od tego w jakim module znajduje się makro. Bo makro może się znajdować w różnych miejscach: w zwykłym module, module arkusza, module skoroszytu, module formularza czy module klasy.
Me odnosi się właśnie do obiektu w obrębie modułu,, którego znajduje się makro. Czyli jeżeli piszemy kod w module formularza to Me odnosi się do formularza, jeżeli piszemy kod w obrębie skoroszytu to po wpisaniu zwrotu Me. wyświetlona zostanie lista właściwości, metod i zdarzeń dla obiektu Workbook.
Korzyści z Me
Czy warto stosować Me w sytuacji, gdy piszemy kod w innym miejscu niż zwykły moduł?
Moim zdaniem tak, bo wyświetla nam się podpowiedź IntelliSense z listą wszystkich właściwości (w tym kolekcji), metod i zdarzeń tego obiektu. Pisanie kodu staje się bardziej komfortowe.
Ma to też znaczenie gdy chcemy się odwołać do konkretnej kontrolki na formularzu. Jeżeli mamy na formularzu np. 30 kontrolek, to nie ma możliwości aby zapamiętać ich nazwy.
Chcąc przypisać w kodzie np. listę dla pola kombi musiałbym wykonać kilka czynności: wejść na formularz, kliknąć kontrolkę, podejrzeć jej nazwę w okienku, wpisać jej pełną nazwę w kodzie makra.
Wpisując Me wyświetla mi się od razu m.in. lista wszystkich kontrolek na formie. Znając pierwszą literę nazwy kontrolki, lista od razu mi się zawęża.
Zdecydowanie korzystam z Me. właśnie podczas pracy nad formularzami i dokładnie z tego powodu co opisałeś.
Wpisuję tylko Me.txt_ i już mam wszystkie kontrolki z przedrostkiem txt w swojej nazwie.
Dokładnie o to chodzi. To tez pokazuje jak ważne jest stosowanie konwencji w nazwach, nie tylko zmiennych, ale i kontrolek. Jeżeli ktoś wszystkie pola tekstowe nazywa z przedrostkiem txt to wtedy wystarczy, że wpisze Me.t i już powinien znaleźć odpowiednie pole tekstowe. Jeżeli ktoś nie stosuje takiej konwencji nazw i ma bałagan w kodzie, to wtedy Me nie będzie mu faktycznie potrzebne.
A macie może jakąś stosowaną konwencję nazywanie kontrolek na formularzach? Może podzielicie się?
Ja stosuję następującą nomenklaturę:
TBox_
CmbBox_
Lbl_
ChkBox_
OptBut_
But_
Frm_
LBox_
I chyba więcej mi nie przychodzi na myśl
Mi w zupełności odpowiada ta standardowa konwencja węgierska.
http://www.vbexplorer.com/VBExplorer/library/naming.htm
Do tego obowiązkowo opisowe nazwy kontrolek 🙂