Имя объекта в vba excel

Skip to content

Names in Excel VBA – Explained with Examples!

  • Adding Names in Excel VBA

Names in Excel VBA makes our job more easier. We can save lot of time using Names. It is easy to maintain the formulas, Cells,Ranges and Tables. You can define the names once in the workbook and use it across the workbook. The following examples will show some of the Names daily operations.

  • Adding Names in Excel VBA
  • Deleting Names in Excel VBA
  • Hide UnHide Names in Excel VBA

Adding Names in Excel VBA:

Sometimes you may need to Add name to a particular range in excel worksheet. We can manage range names in excel vba with using names collection.

  • Solution
  • Code
  • Output
  • Example File

Adding Names in Excel VBA – Solution(s):

We can use Names.Add method or Name property of a range for adding names in excel VBA.

We can create range name in the following way. It contains several properties.We must define Name and the Refers To property.please find the following example.The following code creates a name “MyData” and referring to sheet1 of a range(“$A$1:$E$10”)

Code:
'Naming a range
Sub sbNameRange()

    'Adding a Name
    Names.Add Name:="myData", RefersTo:="=Sheet1!$A$1:$E$10"
    
    'OR
    
    'You can use Name property of a Range
    Sheet1.Range("$A$1:$E$10").Name = "myData"

End Sub
Output:

Adding Names in Excel VBA

Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Double click on ThisWorkbook from Project Explorer
  4. Copy the above code and Paste in the code window
  5. Press F5
  6. GoTo Sheet1 and Select Range A1 to D10
  7. You should see the following example
Example File

Download the example file and Explore it.

Analysistabs – Adding Name to Range in excel Workboobk

Deleting Names in Excel VBA:

Sometimes you may need to Delete range name in existing excel workbook for cleaning broken references in excel workbook.

  • Solution
  • Code
  • Output
  • Example File

Deleting Names in Excel VBA – Solution(s):

You can use Delete method for deleting existing names in excel workbook.We can delete range name in the following way.please find the following example.The following code Deletes a name “MyData”.

Code:
'Deleting Names
Sub sbDeleteName()
 
    'myData=Sheet1.range("A1:E10")
    Names("myData").Delete
 
End Sub
Output:

Deleting Names in Excel VBA

Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Double click on ThisWorkbook from Project Explorer
  4. Copy the above code and Paste in the code window
  5. Press F5
  6. GoTo Sheet1 and Select Range A1 to D10
  7. You should see the following example
Example File

Download the example file and Explore it.
Analysistabs – Deleting Name to Range in excel Workboobk

Hide UnHide Names in Excel VBA:

Sometimes you may need to Hide UnHide names in Excel VBA.

  • Solution
  • Code
  • Output
  • Example File

Hide UnHide names in Excel VBA – Solution(s):

You Can Hide UnHide Names in Excel VBA using Visible Property in the following way. when we set visible proprty to false, We dont see defined range name . when we set visible proprty to true, We can see defined range name .

Code:
'Hiding a Name
Sub sbHideName()

	Names("myData").Visible = False

End Sub


'UnHide aName
Sub sbUnHideName()

	Names("myData").Visible = True

End Sub
Output:

Hide UnHide Names in Excel VBA

Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Double click on ThisWorkbook from Project Explorer
  4. Copy the above code and Paste in the code window
  5. Press F5
  6. GoTo Sheet1 and Select Range A1 to D10
  7. You should see the following example
Example File

Download the example file and Explore it.
Analysistabs – Hide UnHide Names in excel Workboobk

Effortlessly Manage Your Projects and Resources
120+ Professional Project Management Templates!

A Powerful & Multi-purpose Templates for project management. Now seamlessly manage your projects, tasks, meetings, presentations, teams, customers, stakeholders and time. This page describes all the amazing new features and options that come with our premium templates.

Save Up to 85% LIMITED TIME OFFER
Excel VBA Project Management Templates
All-in-One Pack
120+ Project Management Templates
Essential Pack
50+ Project Management Templates

Excel Pack
50+ Excel PM Templates

PowerPoint Pack
50+ Excel PM Templates

MS Word Pack
25+ Word PM Templates

Ultimate Project Management Template

Ultimate Resource Management Template

Project Portfolio Management Templates

Related Posts

    • Adding Names in Excel VBA:
  • Adding Names in Excel VBA – Solution(s):
    • Deleting Names in Excel VBA:
  • Deleting Names in Excel VBA – Solution(s):
    • Hide UnHide Names in Excel VBA:
  • Hide UnHide names in Excel VBA – Solution(s):

VBA Reference

Effortlessly
Manage Your Projects

120+ Project Management Templates

Seamlessly manage your projects with our powerful & multi-purpose templates for project management.

120+ PM Templates Includes:

5 Comments

  1. Eric W
    April 30, 2015 at 11:17 AM — Reply

    I am having a problem copying Ranges from one point to another in Excel using VBA.
    I have tried several methods and get the same result any way I’ve tried
    When the copy action is triggered, the destination has the copy from the header row in the destination
    Example: Range(“U14:AO14”).Copy Destination:=Range(“A40”)
    I am receiving the data from U2:AO2.
    I have named the range by selection using the spreadsheet name window. The array that shows in the window shows the correct value. The destination is correct.

    Do you have a clue what is happening, or what I am doing wrong?
    Thank You

  2. Amar
    September 9, 2015 at 5:23 PM — Reply

    Can this defined name be used for coding or in vba editor

  3. PNRao
    September 11, 2015 at 11:51 PM — Reply

    Hi Amar,
    Yes! we can use the defined names in VBA. Example:

    Sheet1.Range("$A$1:$E$10").Name = "myData"
    Range("myData").Interior.ColorIndex = 3
    

    here, myData is a user defined name and the above code will change the background color of the defined range.
    Thanks-PNRao!

  4. Silke Flink
    September 12, 2015 at 12:35 AM — Reply

    Thank you for this post. I was wondering if it is possible to address a dynamic name range in VBA. I have a named range (though I use a lookup-function in the name manager) that is visible in the name manager and can be used in formulas in the Excel sheet.

    I tried this

    dim Taxes_from_Sales as Range
    Set Taxes_from_Sales = Range(“Taxes_from_Sales”)

    whereas “Taxes_from_Sales” is a excel Lookup defined name range. VBA doesn’t recognize it cause of the formula.

    Any idea how to approach this without writing Lookup in VBA?

    Thanks for help

    silke

  5. PNRao
    September 13, 2015 at 1:48 AM — Reply

    Hi,
    It works for dynamic range. In your case, Lookup functions always returns a value, and we need a range to use in VBA.

    I have tried the below example and its working fine:

    Sub DynamicNamedRange()
    'Adding a dynamic Name
    Names.Add Name:="test", RefersTo:="=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!A:A),1)"
    
    'Entering sample data
    For i = 1 To 10
    Cells(i, 1) = i
    Next
    
    'Formatting dynamic range
    Range("test").Interior.ColorIndex = 3
    End Sub
    

    Thanks-PNRao!

Effectively Manage Your
Projects and  Resources

With Our Professional and Premium Project Management Templates!

ANALYSISTABS.COM provides free and premium project management tools, templates and dashboards for effectively managing the projects and analyzing the data.

We’re a crew of professionals expertise in Excel VBA, Business Analysis, Project Management. We’re Sharing our map to Project success with innovative tools, templates, tutorials and tips.

Project Management
Excel VBA

Download Free Excel 2007, 2010, 2013 Add-in for Creating Innovative Dashboards, Tools for Data Mining, Analysis, Visualization. Learn VBA for MS Excel, Word, PowerPoint, Access, Outlook to develop applications for retail, insurance, banking, finance, telecom, healthcare domains.

Analysistabs Logo

Page load link

VBA Projects With Source Code

3 Realtime VBA Projects
with Source Code!

Take Your Projects To The Next Level By Exploring Our Professional Projects

Go to Top

 

Alex_p_123

Пользователь

Сообщений: 16
Регистрация: 17.12.2015

#1

20.07.2017 09:32:50

Добрый день!

Вставляю в ячейку файл — oleobject (не важно чем — диалоговым окном Вставка/объект или макросом).
Теперь мне надо получить имя образованной иконки, чтобы ее форматировать (размещение ячейки, свойства и т.д.).
К примеру чтобы задать ему координаты требуется строки типа

Код
ActiveSheet.Shapes("Object 605").IncrementTop 27.8571653543

Но имя его я не знаю и потому не могу к нему обратиться программно.
Как макросом получить это имя?

Пробовал строки типа SelectedObject.Name, ActiveObject.Name и т.д. — не работает, выдает ошибку.

С уважением, Алексей

Изменено: Alex_p_12320.07.2017 13:26:38

 

Илья Демид

Пользователь

Сообщений: 320
Регистрация: 25.11.2013

#2

20.07.2017 09:43:19

Добрый день, Вам наверное надо вот так пройтись в цикле? Но если объектов много, то как понять какое именно Вам надо имя это загадка для меня

Код
Cells(5, 5) = Sheets(3).Shapes(1).Name

Изменено: Илья Демид20.07.2017 09:45:42

 

Alex_p_123

Пользователь

Сообщений: 16
Регистрация: 17.12.2015

#3

20.07.2017 09:54:08

Цитата
Илья Демид написал:
Cells(5, 5) = Sheets(3).Shapes(1).Name

Не совсем то.
Попробовал для трех ячеек (в одной ничего, в двух других вставлены иконки с разными файлами).
Для всех трех случаев выдает значение «Button418»

Попробовал для одной из ячеек сделать …Shapes(2)… — выдает «Button489»

Получается, что неважно какая ячейка стоит в Вашем примере (Cells(5,5) или что-то другое), он возвращает имя именно для Spapes(1), Shapes(2)….
А мне надо найти имя того Shape (или тех Shapes), который выделен в данный момент (ну или на худой конец прикреплен к выделенной ячейке).

Изменено: Alex_p_12320.07.2017 09:54:50

 

Приложите пример, пожалуйста. Самому интересно стало :)
У себя я cells(5,5) использовал т.к. был открыт рабочий файл и там было пусто :)

 

Alex_p_123

Пользователь

Сообщений: 16
Регистрация: 17.12.2015

#5

20.07.2017 10:01:27

Сейчас попробую
Вот код, который записал за мной vba (русские символы не вставились, но думаю для примера это не принципиально).

Камень преткновения сейчас для меня — строка ActiveSheet.Shapes(«Object 606»).IncrementLeft 42.8570866142

Вот в ней я хочу видеть имя активного (или выделенного) значка, потому что оператор with selection прекрасно работает (пробовал отдельно от этой проблемной строки, но в этот оператор я IncrementLeft вставить не могу — выдает ошибку).

Код
Sub Ìàêðîñ3()
'
' Ìàêðîñ3 Ìàêðîñ
'

'
    Range("O504").Select
    Workbooks.Open Filename:= _
        "Z:65_Sales65_15_Sales_Support1 BPOÎäíî îêíîÈÍÔÎÐÌÀÖÈÎÍÍÎÅ ÏÈÑÜÌÎ_ðååñòðÏðèëîæåíèÿ89_0500_Îïðîñ ìàãàçèíîâ 18 07 2017.xlsx"
    ActiveWindow.Visible = False
    ActiveSheet.OLEObjects.Add(Filename:= _
        "Z:65_Sales65_15_Sales_Support1 BPOÎäíî îêíîÈÍÔÎÐÌÀÖÈÎÍÍÎÅ ÏÈÑÜÌÎ_ðååñòðÏðèëîæåíèÿ89_0500_Îïðîñ ìàãàçèíîâ 18 07 2017.xlsx" _
        , Link:=False, DisplayAsIcon:=True, IconFileName:= _
        "C:WindowsInstaller{90140000-0012-0000-0000-0000000FF1CE}xlicons.exe", _
        IconIndex:=0, IconLabel:= _
        "Z:65_Sales65_15_Sales_Support1 BPOÎäíî îêíîÈÍÔÎÐÌÀÖÈÎÍÍÎÅ ÏÈÑÜÌÎ_ðååñòðÏðèëîæåíèÿ89_0500_Îïðîñ ìàãàçèíîâ 18 07 2017.xlsx" _
        ).Select
    ActiveSheet.Shapes("Object 606").IncrementLeft 42.8570866142
    ActiveSheet.Shapes("Object 606").IncrementTop 17.1428346457
    With Selection
        .Placement = xlMoveAndSize
        .PrintObject = True
    End With
End Sub

Изменено: Alex_p_12320.07.2017 10:03:13

 

Илья Демид

Пользователь

Сообщений: 320
Регистрация: 25.11.2013

#6

20.07.2017 10:04:26

Попробуйте так

Код
With Selection
Cells(5, 5) = .Name 'тут опять же моя ячейка куда выводится
End With
End Sub

Чтобы добавить ее в вашу строку сделайте переменную которой присвоите «.name» Правда легче сразу сделать

Код
With selection
.incrementleft

Изменено: Илья Демид20.07.2017 10:08:05

 

Alex_p_123

Пользователь

Сообщений: 16
Регистрация: 17.12.2015

Не работает конечно же, потому что он не понимает, имя чего я у него спрашиваю
Надо запрашивать именно имя объекта (shape, oleobject и т.д.).
Вот я и пытаюсь понять как это сделать.

 

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

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#9

20.07.2017 10:21:32

Доброе время суток.

Цитата
Alex_p_123 написал:
Вставляю в ячейку файл — oleobject (не важно чем — диалоговым окном Вставка/объект или макросом).
Теперь мне надо получить имя образованной иконки, чтобы ее форматировать (размещение ячейки, свойства и т.д.).
Цитата
Alex_p_123 написал:
ActiveSheet.OLEObjects.Add

Такая сложность справку по методу коллекции OLEObjects.Add посмотреть, чтобы увидеть, что возвращается ссылка на OLEObject с которым вы и можете сразу выполнять требуемые манипуляции?

Цитата
Function Add([ClassType], [Filename], [Link], [DisplayAsIcon], [IconFileName], [IconIndex], [IconLabel], [Left], [Top], [Width], [Height]) As OLEObject
Код
Dim myObject As OLEObject
Set myObject = ActiveSheet.OLEObjects.Add(....)
Debug.Print myObject.Name

Успехов.

 

Alex_p_123

Пользователь

Сообщений: 16
Регистрация: 17.12.2015

 

Илья Демид

Пользователь

Сообщений: 320
Регистрация: 25.11.2013

#11

20.07.2017 10:40:08

Идите по варианту который предложил Андрей VG, в моем примере Вам необходимо выбрать именно объект (ПКМ по картинке), после чего

Код
With Selection
Cells(2, 3) = .Name 
End With
 

AndreTM

Пользователь

Сообщений: 454
Регистрация: 02.05.2013

#12

20.07.2017 11:15:51

Всё дело в том, что коллекция Shapes — по сути, независима от листа. То есть нельзя по определенному
И узнать текущую привязку объектов можно только перебором всех объектов коллекции, проверяя .TopLeftCell (объект-ячейка, над которой расположен верхний-левый угол шейпа) и координаты .Top/.Left/.Hight/.Width шейпа. Ну и для ускорения перебора можно проверять какие-то известные свойства (например, .AutoShapeType).
Кстати, даже

Код
Set shape = .... (команда добавления объекта)...

помогает только в случаях, когда вы вставляете новый объект (.AddPicture/.Insert), а вот если копируете имеющийся шейп (через .Cut/.Dupclicate — .Copy/.Paste) — то никак. Потому что копируете-то вы объект через буфер, и вставляете на лист, не возвращается там объект из команды вставки.
Вариант, который мне удалось в свое время придумать для таких случаев — это сразу после вставки захватывать последний объект коллекции Shapes:

Код
Set shape = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)

и далее сразу его обработать.
А иначе, как выше сказано — только заново каждый раз перебирать всю коллекцию, проверяя координаты привязки…

 

Alex_p_123

Пользователь

Сообщений: 16
Регистрация: 17.12.2015

#13

20.07.2017 14:27:23

Илья Демид

— да, вариант, предложенный

Андрей VG

, оказался работающим.

Андрей VG

— спасибо.

Вот в каком виде это работает у меня в тестовом файле:

Код
Sub Макрос2()
    
    Dim myObject As OLEObject
   
    Range("O505").Select
    Workbooks.Open Filename:= _
        "Z:65_Sales65_15_Sales_Support1 BPOОдно окноИНФОРМАЦИОННОЕ ПИСЬМО_реестрПриложения89_0501_Опрос магазинов 2.xlsx"
    ActiveWindow.Visible = True
    Set myObject = ActiveSheet.OLEObjects.Add(Filename:= _
        "Z:65_Sales65_15_Sales_Support1 BPOОдно окноИНФОРМАЦИОННОЕ ПИСЬМО_реестрПриложения89_0501_Опрос магазинов 2.xlsx" _
        , Link:=False, DisplayAsIcon:=True, IconFileName:= _
        "C:WindowsInstaller{90140000-0012-0000-0000-0000000FF1CE}xlicons.exe", _
        IconIndex:=0, IconLabel:= _
        "Z:65_Sales65_15_Sales_Support1 BPOОдно окноИНФОРМАЦИОННОЕ ПИСЬМО_реестрПриложения89_0501_Опрос магазинов 2.xlsx" _
        )
    s = myObject.Name
    myObject.Select
    With Selection
        .Placement = xlMoveAndSize
        .PrintObject = True
    End With
    
    Range("P505").Select
    ActiveSheet.Shapes(s).IncrementLeft 20
    ActiveSheet.Shapes(s).IncrementTop 60
    
    Workbooks("089_0501_Опрос магазинов 2.xlsx").Close
    
End Sub

Если убрать вот этот отрезок:

Код
Workbooks.Open Filename:= _
        "Z:65_Sales65_15_Sales_Support1 BPOОдно окноИНФОРМАЦИОННОЕ ПИСЬМО_реестрПриложения89_0501_Опрос магазинов 2.xlsx"
    ActiveWindow.Visible = True

то он при создании объекта создает какие-то книги, котjрые потом нигде кроме VBA редактора не видны, так как имеют свойство  ActiveWindow.Visible = false

Команда ActiveSheet.Shapes.Count может оказаться крайне полезной.

AndreTM

— Ваш вариант (собственно его я и имел в виду строкой выше) выглядит для моих целей наверное самым верным, но я его еще не тестировал, поэтому буду пробовать.

Кстати обратил внимание, что в свойствах объекта можно задать Left и Top, но тогда он размещает его не в ячейке, а на соответствующем смещении от верхнего левого угла файла, то есть в районе ячейки A1.

Всем спасибо, по-моему вопрос нашел свое решение, далее буду крутить циклы когда надо будет вставить в ячейку несколько объектов по определенным признакам (например когда название файлов содержит соответствующий номер строки), но это уже другая история.

Excel VBA Name

What is VBA Name?

VBA NAME is a statement which can be used to move files from across drives and while moving the files we can rename the moving file as well.

  • What if you want to copy the file but paste with different name???
  • What is you want to copy the file but to delete the file in the original source folder??
  • With manual work we do all this without much trouble, but if your VBA project requires all of these to be done in the middle of the code execution how will you do??

In this article, we will show you how to do all of these using “Name Statement” in VBA. Read on…

What Does Name Statement Do in VBA?

When you hear the word “Name” what comes to your mind?? The first thing I got was “Worksheet Name” and “Workbook Name”.

Renaming can be done within the same directory or folder, not across drives. Let’s look at the syntax of the NAME statement.

Name OldName as NewName
  • Old Name: This is nothing but the current name of the file in the mentioned folder path.
  • New Name: While moving the file what should be the new name to be allocated to it?

One thing we need to remember is, NAME statement is used to move and rename the files not to create any file, folder or directory.

In order to move or rename the file, we need to first close the targeted file and execute the task or else we will get an error message.

How to Use VBA Name in Excel?

We will learn how to use a VBA Name Function with few examples in excel.

You can download this VBA Name Excel Template here – VBA Name Excel Template

Example #1 – VBA Name

Take a look at the simple example of changing the name of the File in the same folder. For example, I have a file in the below folder.

Changing the Name

With this file, I want to rename the file “Sales April 2019.xlsx” to “April 2019.xlsx”. This can be done by using the NAME statement. Follow the below steps to apply the code.

Step 1: Add the new module.

VBA Name Module

Step 2: Start the subprocedure.

Code:

Sub FileCopy_Example1()

End Sub

VBA Name - subprocedure

Step 3: Declare two variables as a string.

Code:

Sub FileCopy_Example1()

Dim OldName As String
Dim NewName As String

End Sub

VBA Name - String

Step 4: For Old, Name Variable assign the folder path and file name with extension.

Code:

Sub FileCopy_Example1()

Dim OldName As String
Dim NewName As String

OldName = " D:VPB FileApril FilesNew ExcelSalesApril.xlsx"

End Sub

File Location

Step 5: For the New Name variable we will mention the same path but will change the name of the file only.

Code:

Sub FileCopy_Example1()

Dim OldName As String
Dim NewName As String

OldName = " D:VPB FileApril FilesNew ExcelSalesApril.xlsx"
NewName = " D:VPB FileApril FilesNew ExcelApril.xlsx"

End Sub

New Name variable

Step 6: Now I will use the NAME Statement.

Code:

Sub FileCopy_Example()

Dim OldName As String
Dim NewName As String

OldName = " D:VPB FileApril FilesNew ExcelSalesApril.xlsx"
NewName = " D:VPB FileApril FilesNew ExcelApril.xlsx"

Name OldName As NewName

End Sub

Using the Name Statement

Step 7: Old Name & New Name are the variables which hold path references. Now execute the code to see the magic.

New File

In the same folder itself, it has changed the file name from “Sales April 2019.xlsx” to “April 2019.xlsx”.

This is the way of changing the file name in the same folder how about changing from one folder to a different folder.

Example #2 – Change from One Folder to Another

In order to move from one folder to another, we need to change the New Name path. For an example look at the below code.

Sub FileCopy_Example1()

Dim OldName As String
Dim NewName As String

OldName = "D:VPB FileApril FilesNew ExcelApril 1.xlsx"
NewName = "D:VPB FileApril FilesFinal locationApril.xlsx"

Name OldName As NewName

End Sub

Copy Paste

If you observe the difference from our previous code to this code, we have changed the New Name to a different folder in the same drive.

Now I will execute this code and see the impact in both the folders.

New Folder:

VBA Final Location

In the new folder, we got the new sheet named as “April 2019.xlsx”. Now, look at the Old Folder.

Old Folder:

Old file

It says “This folder is empty”.

This is unlike our File Copy method. Name statement has removed the original file from the old folder and moved to a new folder with a new name as we specified.

Like this, we can move files from one folder to another with different names by using the “NAME” statement.

Recommended Articles

This is a guide to VBA Name. Here we discuss how to use Excel VBA Name Function along with practical examples and downloadable excel template. You can also go through our other suggested articles –

  1. VBA Copy Paste
  2. VBA RGB
  3. VBA Subscript out of Range
  4. FileCopy in VBA

Работа с объектами

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

Что такое объект?

Объект — это комбинация кода и данных, которую можно рассматривать как одно целое. Объект может быть частью приложения, как элемент управления или форма. Целое приложение также может быть объектом. В таблице приведены примеры типов объектов, которые можно использовать в VBA:

Объект Описание
Кнопка управления Элементы управления на форме, например кнопки управления и рамки, являются объектами
Форма Каждая форма в проекте VBA является отдельным объектом
База данных Базы данных являются объектами и содержат другие объекты, например, поля и индексы
Диаграмма Диаграмма в Microsoft Excel является объектом

Происхождение объектов

Каждый объект в VBA определен классом (class). Класс используется для создания объектов и определяет их характеристики. Приведем два примера взаимоотношений между классами и объектами в VBA:

 Элементы управления Панели элементов управления в VBA представляют классы. Объект, известный как элемент управления, не существует, пока он не нарисован на форме. Когда создается элемент управления, создается копия, или экземпляр (instance) класса элемента управления

 Форма, используемая во время разработки, является классом. Во время выполнения VBA создает экземпляр класса формы

Окно Properties (Свойства) отображает класс и свойство Name (Имя) объектов в разработанном приложении VBA.

Все объекты создаются как идентичные копии своих классов. Свойства индивидуальных объектов можно изменять. Например, если на форме созданы три кнопки управления, каждый объект кнопка управления является экземпляром класса ConroandButton. Объекты одного класса используют общий набор характеристик и способностей (свойств, методов и событий). Каждому объекту дано свое имя, их можно по отдельности заблокировать и разблокировать, поместить в разные места на форме и т. д.

Понятие «класс объекта» не часто упоминается. Просто надо помнить, что, например, термин «элемент управления списком» означает «экземпляр класса ListBox».

Что можно делать с объектами?

Объект предоставляет в распоряжение разработчика готовый исполняемый код. Например, вместо того чтобы программировать собственные диалоги File Open (Открыть файл) и File Save (Сохранить файл), можно использовать элемент управления общим диалогом (объект, предоставляемый VBA). Можно написать собственный код управления планированием и ресурсами, но вместо этого проще использовать объекты Calendar (Календарь), Resources (Ресурсы) и Task (Задача), предоставляемые Microsoft Project (Проект).

VBA может комбинировать объекты из других источников

VBA предоставляет инструменты, которые позволяют комбинировать объекты из различных источников. Можно строить решения, комбинируя самые мощные возможности VBA и приложений, поддерживающих Automation (Автоматизация) (ранее известная как OLE Automation). Автоматизация (automation) — это свойство составной модели объекта (Component Object Model, СОМ), промышленного стандарта, используемого приложениями для раскрытия своих объектов инструментам разработки и другим приложениям.

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

 Объект Microsoft Excel chart (Диаграмма Microsoft Excel)

 Объект Microsoft Excel Worksheet (Рабочий лист Microsoft Excel)

 Объект Microsoft Word Document (Документ Microsoft Word)

Эти объекты можно использовать для создания приложения. Это сохранит время разработчика, так как не надо писать код, воспроизводящий все функциональные возможности объектов Microsoft Excel и Microsoft Word.

Основы работы с объектами

Объекты VBA поддерживают свойства, методы и события. В VBA данные объекта (установки или атрибуты) называются свойствами, тогда как процедуры, которые оперируют с объектом, называются его методами. Событие — это действие, распознаваемое объектом, например, щелчок кнопкой мыши или нажатие клавиши клавиатуры, и программист может написать код, реагирующий на это событие.

Можно изменять характеристики объекта, меняя его свойства. Рассмотрим радио: одно из свойств радио — громкость (volume). В терминах обсуждаемой темы можно сказать, что радио обладает свойством «Volume», которое регулируется изменением его значения. Предположим, что можно установить регулятор громкости радио в положения от 0 до 10. Если бы радио управлялось с помощью VBA, можно было бы написать код процедуры, которая изменяла бы значение свойства «Volume» от 3 до 5, чтобы радио работало громче:

Radio.Volume = 5

Кроме свойств объекты обладают методами. Методы — это такая же часть объектов, как и свойства. В целом, методы — это действия, которые можно выполнить, тогда как свойства — это атрибуты, которые устанавливаются или восстанавливаются. Например, чтобы позвонить по телефону, надо набрать номер (dial). Можно было бы сказать, что телефоны обладают методом «Dial», и использовать этот синтаксис для набора номера 555111:

Phone.Dial 5551111

Объекты также обладают событиями. События инициируются, когда изменяются некоторые свойства объекта. Например, радио может иметь событие «VolumeChange» (Изменение громкости). Телефон может иметь событие «Ring»(Звонок).

Управление объектами с помощью свойств

Индивидуальные свойства меняются. Некоторые можно установить во время разработки. Для этого лучше использовать окно Properties (Свойств), что позволяет вообще не писать никакого кода. Другие свойства не доступны во время разработки, следовательно, необходимо программировать установку таких свойств во время выполнения.

Свойства, которые можно установить или значения которых можно получить только во время выполнения, называются изменяемыми (read-write properties). Свойства, значения которых можно только прочитать во время выполнения, называются неизменяемыми (read-only properties).

Установка значений свойств

Значение свойства устанавливается, только если необходимо изменить внешний вид или поведение объекта. Например, свойство Text элемента управления TextBox изменяют, если необходимо изменить содержимое поля.

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

object.property = expression

Следующие операторы демонстрируют, как можно устанавливать значения свойств:

Textl.Top = 200 ‘ Значение свойства Тор равно 200 твипам.

Textl.Visible = True ‘ Отображает текстовое поле.

Textl.Text = «hello» ‘ Отображает ‘hello’ в текстовом поле.

Получение значений свойств

Получают значение свойства тогда, когда хотят определить состояние объекта до выполнения каких-либо действий из кода, например, присвоить значение свойству другого объекта. Можно проанализировать содержимое текстового поля (значение свойства Text этого элемента управления) перед выполнением кода, который может изменить это значение.

В большинстве случаев, чтобы получить значение свойства, применяется следующий синтаксис:

variable = object.property

Можно также использовать значение свойства, как часть более сложных выражений, без присваивания этого значения переменной. В следующем примере значение свойства Top (Верх) нового члена массива элементов управления вычисляется как значение свойства Top предыдущего члена плюс 400:

Private Sub cmdAdd_Click()

‘ [операторы]

optButton(n).Top = optButton(n-l).Top + 400

‘ [операторы] End Sub

Примечание

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

Использование методов в коде

Методы могут воздействовать на значения свойств. Например, в аналоге радио метод SetVolume (Установить громкость) изменяет свойство volume (громкость). Списки VBA имеют свойство List (Список), которое можно изменить методами clear (Очистить) и Additem (Добавить элемент).

При использовании метода в коде запись соответствующего оператора зависит от того, сколько параметров требуется передать в метод, и возвращает ли метод значение. Если методу не требуются параметры, его можно вызвать с помощью следующего синтаксиса:

object.теthod.

В следующем примере метод Refresh (Освежить) перерисовывает картинку:

Picturel.Refresh ‘ Перерисовка элемента управления.

Некоторые методы, как метод Refresh, не имеют параметров и не возвращают значения.

Если методу требуется более одного параметра, они отделяются друг от друга запятыми. Например, метод circle (Круг) требует задать положение, радиус и цвет круга на форме:

‘ Нарисовать голубой круг радиусом 1200 твипов.

Forml.Circle (1600, 1800), 1200, vbBlue

Если необходимо сохранить возвращаемое методом значение, следует заключить в круглые скобки его параметры. Например, метод GetData (Получить данные) возвращает картинку из буфера обмена (clipboard):

Picture = Clipboard.GetData (vbCFBitmap)

Если метод не возвращает никакого значения, параметры задаются без круглых скобок. Например, метод Additem (Добавить элемент) не возвращает значения:

Listi.Additem «yourname» ‘ Добавить текст ‘yourname’ в список.

Взаимосвязь объектов

Если на форму помещаются две кнопки управления, они являются отдельными объектами с различными значениями свойства Name (Имя) (command1 и Command2), НО ОНИ СОВМССТНО ИСПОЛЬЗУЮТ ОДИН И ТОТ ЖЕ КЛАСС: CommandButton.

Кроме того, они расположены на одной форме. Но рассмотренный выше в этой главе элемент управления также принадлежит этой форме. Это выстраивает элементы управления в некоторую иерархию. Чтобы сослаться на элемент управления, сначала нужно сослаться на форму, точно так же необходимо набрать код страны или код области, прежде чем набирать конкретный номер телефона.

Рассматриваемые кнопки управления также являются элементами управления — это их общая характеристика. Все элементы управления имеют общие характеристики, что отличает их от форм и других объектов в окружении VBA. Далее будет рассматриваться использование наборов VBA для объединения родственных объектов в группы.

Иерархия объектов

Иерархия объектов (object hierarchy) определяет, как объекты связаны друг с другом и как к ним можно обратиться. В большинстве случаев программисту нет необходимости заботиться об иерархии объектов VBA, однако:

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

 Работая с объектами доступа к данным, следует знать иерархию Data Access Objects (Объектов доступа к данным)

Наборы объектов

Наборы объектов имеют собственные свойства и методы. Объекты в наборе называются членами набора (members of the collection). Все члены набора перенумерованы последовательно, начиная с 0. Номер члена в этой последовательности называется его индексом (index number). Например, набор Controls (Элементы управления) состоит из всех элементов управления на заданной форме, как показано на рис. 5.10. Наборы применяются для упрощения кода, если необходимо выполнить одну и ту же операцию над всеми объектами в наборе.

Например, следующий код последовательно просматривает набор controls и заносит имя члена в список:

Dim MyControl as Control For Each MyControl In Forml.Controls

‘ Имя каждого элемента управления заносится в список.

Listl.AddItem MyControl.Name Next MyControl

Применение свойств и методов к членам наборов

Существует два общих способа адресации члена набора:

» Задать имя члена. Следующие выражения эквивалентны:

Controls(«List1») Controls!List1

 Использовать индекс члена:

Controls(3)

Коль скоро имеется возможность адресации ко всем членам сразу и к индивидуальным членам, применять свойства и методы можно следующим образом:

‘ Установить значение свойства Тор списка равным 200.

Controls! List1. Top = 200

или так:

Dim MyControl as Control

For Each MyControl In Form1.Controls ()

‘ Установить значение свойства Top каждого члена равным 200.

MyControl.Top = 200

Next MyControl

Объекты, содержащие другие объекты

В VBA некоторые объекты содержат другие объекты. Например, обычно форма содержит один или более элементов управления. Удобство использования объектов в качестве контейнеров (containers) для других объектов заключается в том, что можно ссылаться на контейнер в коде для уточнения, какой объект используется. Например, могут быть две разные формы. Обе формы могут иметь списки с именем istAcctNo. Для точного указания списка можно использовать ссылку на форму, содержащую этот список:

frmReceivable.IstAcctNo.AddItem 1201

или

frmPayable.IstAcctNo.AddItem 1201

Общие наборы в VBA

В VBA существуют некоторые общие случаи, когда один объект содержит другие объекты. В таблице кратко описаны наиболее часто используемые наборы VBA.

Формы.

Первым шагом при разработке приложения на VBA является создание интерфейса, видимой части приложения, с которым взаимодействует пользователь. Формы и элементы управления как раз и являются строительными блоками при создании интерфейса. Именно с этими объектами приходится работать при построении приложений.

Формы — это объекты, которые обладают свойствами, определяющими их внешний вид, методами, определяющими их поведение, и событиями, которые определяют их взаимодействие с пользователем. Установкой свойств формы и разработкой кода VBA для отклика формы на события создается объект, удовлетворяющий требованиям определенного приложения.

Элементы управления — это объекты, содержащиеся внутри объектов-форм. Каждый тип элемента управления имеет свой собственный набор свойств, методов и событий, что делает его пригодным для определенной цели. Некоторые элементы управления, используемые в приложениях, лучше всего подходят для ввода или отображения текста. Другие элементы управления обеспечивают доступ к другим приложениям и данным процессов таким образом, как будто бы удаленное приложение является частью самого приложения.

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

Разработка формы

Формы являются основными строительными блоками приложения VBA, теми окнами, с которыми взаимодействует пользователь при работе с приложением. У форм есть свои свойства, события и методы, которые позволяют управлять их внешним видом и поведением.

Первым шагом в разработке формы является установка значений ее свойств. Свойства формы можно установить во время разработки в окне Properties (Свойства) или во время выполнения (run time) приложения, написав соответствующий код.

Установка свойств формы

Многие из свойств формы воздействуют на ее внешний вид, т.е. то, как ее видит пользователь. Свойство Caption (Название) определяет текст заголовка окна (title bar) формы. Изменяя установку свойства BorderStyle, можно управлять размерами формы.

Свойства Height (Высота) и Width (Ширина) определяют начальные размеры формы; свойства Left (Левый) и Top (Верхний) определяют местоположение формы по отношению к левому верхнему углу экрана монитора.

Свойство Name (Имя) устанавливает имя, по которому можно обращаться к форме из кода. По умолчанию, когда форма впервые добавляется к проекту, ее имя может быть одним из последовательности имен Form1, Form2 и т. д. Однако для программиста удобнее, если свойство Name будет иметь более выразительное значение, например, frmГлавная для первой формы приложения.

Наилучший путь познакомиться с многочисленными свойствами форм — это поэкспериментировать с ними. Изменить значения некоторых свойств формы в окне Properties, затем запустить приложение и проанализировать воздействие новых значений. Узнать больше о каждом свойстве можно также, выбрав его и нажав F1

События и методы формы

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

При каждом изменении размера формы в результате действий пользователя или программным способом инициируется событие Resize (Изменить размер) формы. Это позволяет изменять размеры элементов управления на форме или перемещать их, когда изменены размеры самой формы.

Событие Activate (Активизировать) происходит всегда, когда форма становится активной, а событие Deactivate (Деактивировать) — когда активной становится другая форма приложения. Эти события удобны для организации поведения формы при ее инициировании и завершении работы с ней. Например, можно написать код, который в случае события Activate выделит текст в каком-нибудь тeкcтoвoм окне, а в случае события Deactivate внесенные изменения будут сохранены в файле или базе данных.

Чтобы сделать форму видимой, следует вызвать метод show (Показать):

Form2.Show

Вызов метода show имеет тот же эффект, что и установка значения свойства visible (Видимый) формы в True (Истина).

Многие из методов формы работают с текстом или графикой. Методы Print (Печатать), Line (Линия), Сircle (Окружность) и Refresh (Обновить) полезны для печати или рисования непосредственно на поверхности формы.

Свойство Container

Свойство container (Набор) используется для изменения набора объектов внутри формы. Следующие элементы управления могут содержать другие элементы управления:

 Рамка

 Графическое окно

Следующий пример демонстрирует перемещение кнопки управления из одного набора на форме в другой. Откроем новый проект и создадим на форме рамку, графическое окно и кнопку управления.

Следующий код в процедуре обработки события click (Щелчок) формы увеличивает переменную цикла и использует конструкцию select case для поочередного перемещения кнопки управления из контейнера в контейнер:

Private Sub Form_Click() 
Static intX as Integer 
Select Case intX
Case 0
Set Command1.Container = Picture1
Command1.Top= 0
Command1.Left= 0
Case 1
Set Coinmand1. Container = Frame1 
Command1.Top= 0 
Command1.Left= 0
Case 2
Set Command1.Container = Form1 
Conmiand1. Top= 0 
Commandl.Left= 0
End Select 
intX = intX + 1 
End Sub

Связь между объектами

Кроме использования и создания объектов в VBA можно организовать коммуникационную связь с другими приложениями и управлять их объектами из разрабатываемого приложения. Возможность совместного использования данных приложениями — одна из ключевых в операционной системе Windows. VBA предоставляет большую гибкость при организации взаимодействия с другими приложениями.

Создание объектов

Самый простой способ создать объект — щелкнуть два раза на элементе управления в Панели управления. Однако для реализации всех возможностей объектов, доступных в VBA и из других приложений, следует использовать программные возможности VBA для создания объектов во время выполнения:

 Можно создавать ссылки на объект с помощью переменных

 Можно создавать собственные объекты с самого начала с помощью модулей классов

 Можно создавать собственные наборы с помощью объекта collection (Набор.)

Использование переменных для объектов

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

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

 Во время выполнения кода переменные можно изменять, организуя ссылки на другие объекты

 Ссылка на переменную, содержащую объект, более эффективна, чем постоянная ссылка на сам объект

Использование переменной для объекта аналогично использованию обычной переменной, но с одним дополнительным шагом — присваиванием объекта переменной:

 Сначала ее объявляют:

Dim variable As class

 Затем ей присваивают объект:

Set variable = object

Объявление переменных для объектов

Переменные для объектов объявляют так же, как и другие переменные, с помощью операторов Dim, ReDim, Static, Private или public. Единственное отличие заключается в наличии необязательного ключевого слова New (Новый) и параметра class (класс), они обсуждаются ниже в этой главе. Синтаксис задания переменной для объекта следующий:

(Dim | ReDim | Static | Private | Public} variable As [New] class

Например, можно объявить переменную для объекта, которая ссылается на форму с именем frmMain в приложении:

Dim FormVar As New frmMain ‘ Объявление объектной переменной типа frmMain.

Можно также объявить переменную, которая может ссылаться на любую форму в приложении:

Dim anyForm As Form ‘ Переменная родовой формы.

Подобным же образом можно объявить переменную для ссылки на любое текстовое поле в приложении:

Dim anyText As TextBox ‘ Может ссылаться на любое текстовое поле

Можно объявлять переменные для объекта, которые ссылаются на элемент управления любого вида:

Dim anyControl As Control ‘ Переменная родового элемента управления.

Заметим, что можно объявлять переменную формы, которая будет ссылаться на конкретные формы в приложении, но нельзя объявить переменную элемента управления, которая будет ссылаться на конкретный элемент управления. Можно объявлять переменные, которые ссылаются на определенный тип элемента управления, например TextBox или ListBox, но не на конкретный элемент данного типа, например txtEntry или Listl. Но можно присвоить определенный элемент управления переменной соответствующего типа. Например, для формы со списком, имеющим имя istSample, можно написать код:

Dim objDemo As ListBox 
Set objDemo = IstSample

Назначение объектов переменным

Назначить или присвоить объект переменной можно оператором Set:

Set variable = object

Этот оператор следует применять, если необходимо, чтобы переменная ссылалась на какой-то объект.

Иногда можно использовать переменные для объектов, иногда переменные для определенного типа элементов управления, просто для того, чтобы сократить размер набираемого кода. Например:

If frmAccountDisplay.txtAccountBalance.Text < 0 Then
FrmAccountDisplay.txtAccountBalance.BackColor = 0 _
FrmAccountDisplay.txtAccountBalance.ForeColor = 255 
End If

Этот код можно значительно сократить, если применить переменную для элемента управления:

Dim Bal As TextBox
Set Bal = frmAccountDisplay.txtAccountBalance
If Bal.Text < 0 Then
Bal.BackColor = 0
Bal.ForeColor = 255 
End If

Типы конкретных и родовых объектов

Переменные для конкретных объектов (specific object variables) должны ссылаться на один конкретный тип объекта или класса. Переменная для конкретной формы может ссылаться только на одну форму в приложении (хотя она может ссылаться на одну форму из множества экземпляров этой формы). Точно так же переменная для конкретного элемента управления может ссылаться только на один конкретный тип элемента управления в приложении, например, TextBox или ListBox. Чтобы посмотреть, как это делается, откроем новый проект и поместим на форму поле ввода. Добавим следующий код к форме:

Private Sub Form_Click()
Dim anyText As TextBox
Set anyText = Textl
anyText.Text = "Hello" 
End Sub

Запустим приложение и щелкнем кнопкой мыши на форме. Свойство Text (Текст) поля ввода изменится на «Hello».

Переменные для родовых объектов (generic object variables) могут ссылаться на один из многих конкретных типов объектов. Переменная для родовой формы, например, может ссылаться на любую форму в приложении; переменная для родового элемента управления может ссылаться на любой элемент управления на любой форме в приложении. Чтобы посмотреть, как это делается, откроем новый проект и поместим несколько элементов управления рамкой, меткой и кнопок управления на форму в произвольном порядке. Добавим следующий код к форме:

Private Sub Form_Click()
Dim anyControl As Control
Set anyControl = Formi.Controls(3)
anyControl.Caption = "Hello" 
End Sub

Запустим приложение и щелкнем кнопкой мыши на форме. Надпись на элементе управления, помещенном на форму третьим, изменится на «Hello».

В VBA существуют три типа родовых объектов:

 Form. Ссылается на любую форму в приложении

 control. Ссылается на любой элемент управления в приложении

 object. Ссылается на любой объект

Переменные для родовых элементов управления полезны, если не известен конкретный тип объекта, на который будет ссылаться переменная во время выполнения. Например, в коде, который будет оперировать с любой формой в приложении, необходимо использовать переменную для родовой формы.

Формы как объекты

Наиболее часто формы используются для создания интерфейса приложения, но они также являются объектами, которые можно вызывать из других модулей приложения. Формы тесно связаны с модулями классов. Главное различие между ними заключается в том, что формы могут быть видимыми объектами, тогда как модули не имеют видимого интерфейса.

Добавление разработанных пользователем методов и свойств

Можно добавлять разработанные методы и свойства к формам и обращаться к ним из других модулей в приложении. Чтобы создать новый метод для формы, следует объявить процедуру с ключевым словом public:

' Пользовательский метод на Form1 
Public Sub LateJobsCountO
. ' <операторы> 
End Sub

Процедуру LateJobsCount можно вызвать из другого модуля оператором:

Form1.LateJobsCount

Создать новое свойство так же просто, как объявить открытую переменную в модуле формы:

Public IDNumber As Integer

Можно устанавливать и возвращать значение свойства IDNumber формы Form1 из других модулей двумя операторами:

Form1.IDNumber = 3 
Textl.Text = Form1.IDNumber

Можно также использовать процедуры property (Свойство) для добавления разработанных свойств к форме.

Примечание

Можно обратиться к переменной, разработанному методу или установить значение разработанного свойства формы без ее загрузки. Это позволяет выполнить код на форме без загрузки ее в память. Точно так же ссылка на элемент управления без ссылки на какое-то из его свойств или методов не загружает форму.

Ключевое слово New

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

Использование ключевого слова New с формами

Каждая создаваемая во время разработки форма является классом. С помощью ключевого слова New можно создавать новые экземпляры этого класса. Чтобы увидеть, как это делается, создадим кнопку управления и несколько других элементов управления на форме. В окне Properties присвоим свойству Name формы значение sample. Добавим следующий код в процедуру обработки события click кнопки управления:

Dim x As sample
Set x = New sample
х. Show

Запустим приложение и щелкнем несколько раз кнопкой мыши на кнопке управления. Передвинем первую форму в сторону. Так как форма является классом с видимым интерфейсом, мы увидим дополнительные копии. Каждая форма имеет те же самые элементы управления, что и форма во время разработки.

Примечание

Чтобы сделать форму переменной и сохранять экземпляр загруженной формы, следует использовать переменные Static (Статический) или Public (Открытый) вместо локальных переменных.

Использование ключевого слова New другими объектами

Ключевое слово New используется для создания наборов и объектов классов, определенных в модулях классов. Рассмотрим пример, демонстрирующий создание экземпляров класса с помощью ключевого слова New. Откроем новый проект и создадим кнопку управления на форме Form1. Выполним команду Add Class Module (Добавить модуль класса) меню Project для добавления модуля класса в проект. Установим значение свойства Name модуля класса в showMe.

Следующий код в модуле Form1 создает новый образец класса ShowMe и вызывает процедуру, содержащуюся в модуле класса:

Public cisNew As ShowMe 
Private Sub Commandl Click()
Set cisNew = New ShowMe
cisNew.ShowFrm 
End Sub

Процедура ShowFrm в модуле класса создает новый образец класса sample и показывает ее:

 Sub ShowFrm()
Dim frmNew As sample
Set frmNew = New sample
frmNew.Show
End Sub

Запустим приложение и щелкнем кнопкой мыши несколько раз на кнопке управления. Получаем эффект, как в предыдущем примере, но ключевое слово New использовалось для создания класса.

Ограничения на использование ключевого слова New

С ключевым словом New нельзя:

 Объявлять переменные основного типа данных, например: Dim x As New Integer

 Объявлять переменные любого родового объекта, например: Dim x As New Control

 Объявлять переменные типа для любого конкретного элемента управления, например: Dim X As New ListBox

 Объявлять переменные для любого конкретного элемента управления, например: Dim X As New IstNames.

Освобождение ссылок на объекты

Каждый объект использует память и системные ресурсы. Хорошим стилем программирования является освобождение этих ресурсов, когда объект больше не нужен. Этого можно добиться с помощью:

 Оператора unload (Выгрузить) для выгрузки формы или элемента управления из памяти

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

Передача объектов в процедуры

В VBA можно передавать объекты в процедуры. В следующем примере предполагается, что на форме существует кнопка управления:

Private Sub Commandl_Click()
' Вызов процедуры Demo sub и передача ей формы.
Demo Form1 
End Sub
Private Sub Demo(x As Formi)
' Прижать вправо.
x.Left = 0
End Sub

Также можно передать объект через параметр по ссылке и затем внутри процедуры установить таким образом, чтобы он ссылался на новый объект. Откроем проект и введем в него вторую форму. Поместим на нее графическое окно. Для свойства Name объекта Form2 необходимо установить значение picture2, а для свойства Picture — имя файла иконки *.ico

Процедура Form1_click обработки события вызывает процедуру GetPicture в форме Form2 и передает ей пустую картинку:

Private Sub Form_Click() 
Form2.GetPicture Picture1
End Sub

Процедура GetPicture в форме Form2 присваивает значение свойства Picture (Картинка) графического окна на форме Form2 пустой картинке на форме Form1:

Private objX As PictureBox Public 
Sub GetPicture(x As PictureBox)
' Присваивает переданное графическое окно объектной переменной.
Set objX = x
' Присваивает значение свойства Picture графическому окну на Formi
objX.Picture = picture2.Picture 
End Sub

Запустим это приложение и щелкнем кнопкой мыши на форме Form1. Увидим значок формы Form2 в графическом окне на форме Form1.

Объектная модель FileSystemObject

Объектная модель FileSystemObject представляет собой не иерархическую структуру объектов (классов), позволяющих получать информацию о файловой системе компьютера и выполнять различные операции с файлами и каталогами этой системы.

Порядок использования объектной модели FileSystemObject, т.е. ее объектов с их свойствами и методами при программировании приложения следующий:

 Подключить к проекту библиотеку типов SCRRUN.DLL. Эта библиотека входит в комплект поставки последних разновидностей Windows95, а все более новые Windows, как 9x, так и NT содержат ее обязательно. Получить эту бибилотеку можно бесплатно на сайте Microsoft http://msdn.microsoft.com/scripting.

 Создать новый объект типа FileSystemObject стандартными методами (посредством New или CreateObject)

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

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

Set objvar=Nothing

Объектная модель включает следующие классы

Класс (тип объекта) Назначение
FileSystemObject Обеспечивает доступ к файловой системе компьютера.
Drives Cодержит объекты Drive, каждый из которых ассоциируется ровно с одним диском в файловой системе компьютера, с учетом сети.
Drive Обеспечивает доступ к информации о заданном диске компьютера002E
Folders Семейство Folders содержит объекты Folder, каждый из которых ассоциируется ровно с одним подкаталогом заданного каталога.
Folder Обеспечивает доступ к информации о заданной папке, содержащимся в ней папках и каталогах, а также методы перемещения папки и создания текстового файла.
Files Семейство Files содержит все объекты File, каждый из которых ассоциируется ровно с одним файлом в заданной папке.
File Обеспечивает доступ к информации о заданном файле, методы перемещения файла и открытия текстового файла в режиме последовательного доступа.
TextStream Обеспечивает проведение операций чтения/записи для текстового файла открытого в режиме последовательного доступа.

объект FileSystemObject обеспечивает доступ к файловой системе компьютера. Будучи объектом верхнего уровня объектной модели FileSystemObject является «точкой входа» в файловую систему компьютера. Только после его создания возможен доступ к другим объектам модели, их методам и свойствам.

Dim objFSO As FileSystemObject

Set objFSO = CreateObject(«Scripting.FileSystemObject»)

или

Set objFSO = New FileSystemObject

Элемент Тип данных Тип данных
objFSO FileSystemObject Идентификатор (имя) объекта FileSystemObject

Свойства объекта FileSystemObject

Свойство Тип данных Чтение/запись Описание
Drives Drives Только чтение Содержит ссылку на семейство Drives, содержащую объекты для каждого устройства дисковой памяти компьютера

Методы объекта FileSystemObject

Метод Назначение
BuildPath Создание строки путем слияния аргументов и добавления между ними, если его нет, разделителя «» (обратной косой черты).
CopyFile Копирование одного или нескольких файлов из одной папки в другую.
CopyFolder Копирование содержимого папки со всеми содержащимися в ней папками (подкаталогами) в заданное место.
CreateFolder Создание новой папки с заданным именем.
CreateTextFile Создание файла и открытие его в режиме текстового файла последовательного доступа для записи как объекта TextStream
DeleteFile Удаление одного или нескольких заданных файлов.
DeleteFolder Удаление одной или нескольких заданных папок вместе со всем их содержимым.
DriveExists Проверка существования диска с заданным именем на локальной машине или в сети.
FileExists Проверка существования файла с заданным именем на локальной машине или в сети.
FolderExists Проверка существования папки с заданным именем на локальной машине или в сети
GetAbsolutePathName Получение полного имени файла или папки по относительному имени.
GetBaseName Получение поcледнего компонента — имени папки или файла (без расширения) по его полному или относительному имени.
GetDrive Получение ссылки на объект Drive, связанный с заданным диском.
GetDriveName Получение имени диска из имени папки или файла.
GetExtensionName Получение расширения из заданного имени файла.
GetFile Получение ссылки на объект File, связанный с заданным файлом.
GetFileName Получение имени (с расширением) файла из полного имени (пути) файла.
GetFolder Получение ссылки на объект Folder, связанный с заданной папкой.
GetParentFolderName Получение имени папки, являющейся предпоследним компонентом полного имени (пути) файла или папки.
GetSpecialFolder Получение ссылки на объект Folder, связанный с одной из трех специальных папок — папки Windows, системной папки и папки временных файлов.
GetTempName Получение имени для временного файла.
MoveFile Перемещение одного или нескольких файлов из одной папки в другую.
MoveFolder Перемещение содержимого папки со всеми содержащимися в ней папками (подкаталогами) в заданное место.
OpenTextFile Открытие файла как объекта TextStream для проведения операций чтения/записи в режиме последовательного доступа.

У каждого из прочих вышеперечисленных семейств и объектов имеются свои свойства и методы. Для ознакомления с ними следует обратиться к справочной литературе.

Термин Объекты Excel (понимаемый в широком смысле, как объектная модель Excel) включает в себя элементы, из которых состоит любая рабочая книга Excel. Это, например, рабочие листы (Worksheets), строки (Rows), столбцы (Columns), диапазоны ячеек (Ranges) и сама рабочая книга Excel (Workbook) в том числе. Каждый объект Excel имеет набор свойств, которые являются его неотъемлемой частью.

Например, объект Worksheet (рабочий лист) имеет свойства Name (имя), Protection (защита), Visible (видимость), Scroll Area (область прокрутки) и так далее. Таким образом, если в процессе выполнения макроса требуется скрыть рабочий лист, то достаточно изменить свойство Visible этого листа.

В Excel VBA существует особый тип объектов – коллекция. Как можно догадаться из названия, коллекция ссылается на группу (или коллекцию) объектов Excel. Например, коллекция Rows – это объект, содержащий все строки рабочего листа.

Доступ ко всем основным объектам Excel может быть осуществлён (прямо или косвенно) через объект Workbooks, который является коллекцией всех открытых в данный момент рабочих книг. Каждая рабочая книга содержит объект Sheets – коллекция, которая включает в себя все рабочие листы и листы с диаграммами рабочей книги. Каждый объект Worksheet состоит из коллекции Rows – в неё входят все строки рабочего листа, и коллекции Columns – все столбцы рабочего листа, и так далее.

В следующей таблице перечислены некоторые наиболее часто используемые объекты Excel. Полный перечень объектов Excel VBA можно найти на сайте Microsoft Office Developer (на английском).

Объект Описание
Application Приложение Excel.
Workbooks Коллекция всех открытых в данный момент рабочих книг в текущем приложении Excel. Доступ к какой-то конкретной рабочей книге может быть осуществлён через объект Workbooks при помощи числового индекса рабочей книги или её имени, например, Workbooks(1) или Workbooks(«Книга1»).
Workbook Объект Workbook – это рабочая книга. Доступ к ней может быть выполнен через коллекцию Workbooks при помощи числового индекса или имени рабочей книги (см. выше). Для доступа к активной в данный момент рабочей книге можно использовать ActiveWorkbook.

Из объекта Workbook можно получить доступ к объекту Sheets, который является коллекцией всех листов рабочей книги (рабочие листы и диаграммы), а также к объекту Worksheets, который представляет из себя коллекцию всех рабочих листов книги Excel.

Sheets Объект Sheets– это коллекция всех листов рабочей книги. Это могут быть как рабочие листы, так и диаграммы на отдельном листе. Доступ к отдельному листу из коллекции Sheets можно получить при помощи числового индекса листа или его имени, например, Sheets(1) или Sheets(«Лист1»).
Worksheets Объект Worksheets – это коллекция всех рабочих листов в рабочей книге (то есть, все листы, кроме диаграмм на отдельном листе). Доступ к отдельному рабочему листу из коллекции Worksheets можно получить при помощи числового индекса рабочего листа или его имени, например, Worksheets(1) или Worksheets(«Лист1»).
Worksheet Объект Worksheet – это отдельный рабочий лист книги Excel. Доступ к нему можно получить при помощи числового индекса рабочего листа или его имени (см. выше).

Кроме этого Вы можете использовать ActiveSheet для доступа к активному в данный момент рабочему листу. Из объекта Worksheet можно получить доступ к объектам Rows и Columns, которые являются коллекцией объектов Range, ссылающихся на строки и столбцы рабочего листа. А также можно получить доступ к отдельной ячейке или к любому диапазону смежных ячеек на рабочем листе.

Rows Объект Rows – это коллекция всех строк рабочего листа. Объект Range, состоящий из отдельной строки рабочего листа, может быть доступен по номеру этой строки, например, Rows(1).
Columns Объект Columns – это коллекция всех столбцов рабочего листа. Объект Range, состоящий из отдельного столбца рабочего листа, может быть доступен по номеру этого столбца, например, Columns(1).
Range Объект Range – это любое количество смежных ячеек на рабочем листе. Это может быть одна ячейка или все ячейки листа.

Доступ к диапазону, состоящему из единственной ячейки, может быть осуществлён через объект Worksheet при помощи свойства Cells, например, Worksheet.Cells(1,1).

По-другому ссылку на диапазон можно записать, указав адреса начальной и конечной ячеек. Их можно записать через двоеточие или через запятую. Например, Worksheet.Range(«A1:B10») или Worksheet.Range(«A1», «B10») или Worksheet.Range(Cells(1,1), Cells(10,2)).

Обратите внимание, если в адресе Range вторая ячейка не указана (например, Worksheet.Range(«A1») или Worksheet.Range(Cells(1,1)), то будет выбран диапазон, состоящий из единственной ячейки.

Приведённая выше таблица показывает, как выполняется доступ к объектам Excel через родительские объекты. Например, ссылку на диапазон ячеек можно записать вот так:

Workbooks("Книга1").Worksheets("Лист1").Range("A1:B10")

Содержание

  1. Присваивание объекта переменной
  2. Активный объект
  3. Смена активного объекта
  4. Свойства объектов
  5. Методы объектов
  6. Рассмотрим несколько примеров
  7. Пример 1
  8. Пример 2
  9. Пример 3

Присваивание объекта переменной

В Excel VBA объект может быть присвоен переменной при помощи ключевого слова Set:

Dim DataWb As Workbook
Set DataWb = Workbooks("Книга1.xlsx")

Активный объект

В любой момент времени в Excel есть активный объект Workbook – это рабочая книга, открытая в этот момент. Точно так же существует активный объект Worksheet, активный объект Range и так далее.

Сослаться на активный объект Workbook или Sheet в коде VBA можно как на ActiveWorkbook или ActiveSheet, а на активный объект Range – как на Selection.

Если в коде VBA записана ссылка на рабочий лист, без указания к какой именно рабочей книге он относится, то Excel по умолчанию обращается к активной рабочей книге. Точно так же, если сослаться на диапазон, не указывая определённую рабочую книгу или лист, то Excel по умолчанию обратится к активному рабочему листу в активной рабочей книге.

Таким образом, чтобы сослаться на диапазон A1:B10 на активном рабочем листе активной книги, можно записать просто:

Смена активного объекта

Если в процессе выполнения программы требуется сделать активной другую рабочую книгу, другой рабочий лист, диапазон и так далее, то для этого нужно использовать методы Activate или Select вот таким образом:

Sub ActivateAndSelect()

   Workbooks("Книга2").Activate
   Worksheets("Лист2").Select
   Worksheets("Лист2").Range("A1:B10").Select
   Worksheets("Лист2").Range("A5").Activate

End Sub

Методы объектов, в том числе использованные только что методы Activate или Select, далее будут рассмотрены более подробно.

Свойства объектов

Каждый объект VBA имеет заданные для него свойства. Например, объект Workbook имеет свойства Name (имя), RevisionNumber (количество сохранений), Sheets (листы) и множество других. Чтобы получить доступ к свойствам объекта, нужно записать имя объекта, затем точку и далее имя свойства. Например, имя активной рабочей книги может быть доступно вот так: ActiveWorkbook.Name. Таким образом, чтобы присвоить переменной wbName имя активной рабочей книги, можно использовать вот такой код:

Dim wbName As String
wbName = ActiveWorkbook.Name

Ранее мы показали, как объект Workbook может быть использован для доступа к объекту Worksheet при помощи такой команды:

Workbooks("Книга1").Worksheets("Лист1")

Это возможно потому, что коллекция Worksheets является свойством объекта Workbook.

Некоторые свойства объекта доступны только для чтения, то есть их значения пользователь изменять не может. В то же время существуют свойства, которым можно присваивать различные значения. Например, чтобы изменить название активного листа на «Мой рабочий лист«, достаточно присвоить это имя свойству Name активного листа, вот так:

ActiveSheet.Name = "Мой рабочий лист"

Методы объектов

Объекты VBA имеют методы для выполнения определённых действий. Методы объекта – это процедуры, привязанные к объектам определённого типа. Например, объект Workbook имеет методы Activate, Close, Save и ещё множество других.

Для того, чтобы вызвать метод объекта, нужно записать имя объекта, точку и имя метода. Например, чтобы сохранить активную рабочую книгу, можно использовать вот такую строку кода:

Как и другие процедуры, методы могут иметь аргументы, которые передаются методу при его вызове. Например, метод Close объекта Workbook имеет три необязательных аргумента, которые определяют, должна ли быть сохранена рабочая книга перед закрытием и тому подобное.

Чтобы передать методу аргументы, необходимо записать после вызова метода значения этих аргументов через запятую. Например, если нужно сохранить активную рабочую книгу как файл .csv с именем «Книга2», то нужно вызвать метод SaveAs объекта Workbook и передать аргументу Filename значение Книга2, а аргументу FileFormat – значение xlCSV:

ActiveWorkbook.SaveAs "Книга2", xlCSV

Чтобы сделать код более читаемым, при вызове метода можно использовать именованные аргументы. В этом случае сначала записывают имя аргумента, затем оператор присваивания «:=» и после него указывают значение. Таким образом, приведённый выше пример вызова метода SaveAs объекта Workbook можно записать по-другому:

ActiveWorkbook.SaveAs Filename:="Книга2", [FileFormat]:=xlCSV

В окне Object Browser редактора Visual Basic показан список всех доступных объектов, их свойств и методов. Чтобы открыть этот список, запустите редактор Visual Basic и нажмите F2.

Рассмотрим несколько примеров

Пример 1

Этот отрывок кода VBA может служить иллюстрацией использования цикла For Each. В данном случае мы обратимся к нему, чтобы продемонстрировать ссылки на объект Worksheets (который по умолчанию берётся из активной рабочей книги) и ссылки на каждый объект Worksheet отдельно. Обратите внимание, что для вывода на экран имени каждого рабочего листа использовано свойство Name объекта Worksheet.

'Пролистываем поочерёдно все рабочие листы активной рабочей книги
'и выводим окно сообщения с именем каждого рабочего листа

Dim wSheet As Worksheet

For Each wSheet in Worksheets
   MsgBox "Найден рабочий лист: " & wSheet.Name
Next wSheet

Пример 2

В этом примере кода VBA показано, как можно получать доступ к рабочим листам и диапазонам ячеек из других рабочих книг. Кроме этого, Вы убедитесь, что если не указана ссылка на какой-то определённый объект, то по умолчанию используются активные объекты Excel. Данный пример демонстрирует использование ключевого слова Set для присваивания объекта переменной.

В коде, приведённом ниже, для объекта Range вызывается метод PasteSpecial. Этот метод передаёт аргументу Paste значение xlPasteValues.

'Копируем диапазон ячеек из листа "Лист1" другой рабочей книги (с именем Data.xlsx)
'и вставляем только значения на лист "Результаты" текущей рабочей книги (с именем CurrWb.xlsm)

Dim dataWb As Workbook

Set dataWb = Workbooks.Open("C:Data")

'Обратите внимание, что DataWb – это активная рабочая книга.
'Следовательно, следующее действие выполняется с объектом Sheets в DataWb.

Sheets("Лист1").Range("A1:B10").Copy

'Вставляем значения, скопированные из диапазона ячеек, на рабочий лист "Результаты"
'текущей рабочей книги. Обратите внимание, что рабочая книга CurrWb.xlsm не является
'активной, поэтому должна быть указана в ссылке.

Workbooks("CurrWb").Sheets("Результаты").Range("A1").PasteSpecial Paste:=xlPasteValues

Пример 3

Следующий отрывок кода VBA показывает пример объекта (коллекции) Columns и демонстрирует, как доступ к нему осуществляется из объекта Worksheet. Кроме этого, Вы увидите, что, ссылаясь на ячейку или диапазон ячеек на активном рабочем листе, можно не указывать этот лист в ссылке. Вновь встречаем ключевое слово Set, при помощи которого объект Range присваивается переменной Col.

Данный код VBA показывает также пример доступа к свойству Value объекта Range и изменение его значения.

'С помощью цикла просматриваем значения в столбце A на листе "Лист2",
'выполняем с каждым из них арифметические операции и записываем результат
'в столбец A активного рабочего листа (Лист1)

Dim i As Integer
Dim Col As Range
Dim dVal As Double

'Присваиваем переменной Col столбец A рабочего листа "Лист2"

Set Col = Sheets("Лист2").Columns("A")
i = 1

'Просматриваем последовательно все ячейки столбца Col до тех пор
'пока не встретится пустая ячейка

Do Until IsEmpty(Col.Cells(i))

   'Выполняем арифметические операции со значением текущей ячейки

   dVal = Col.Cells(i).Value * 3 - 1

   'Следующая команда записывает результат в столбец A
   'активного листа. Нет необходимости указывать в ссылке имя листа,
   'так как это активный лист рабочей книги.

   Cells(i, 1).Value = dVal
   i = i + 1

Loop

Оцените качество статьи. Нам важно ваше мнение:

In any programming language it is quite natural for you to use several variables and objects to develop code. Throughout this process, you might get confused referencing them for the first time or reusing them for the second time. For example, you might create a variable to store an integer and somewhere in the middle of the code, you might accidentally store a string in that variable.

When variables are not used appropriately, there’s a good chance you could run into one of these issues:

  1. Your code is not organized properly
  2. Maintenance of the code becomes takes too much overhead
  3. If maintenance needs to be done by another developer, it takes a very long time for the user to understand the code and maintain it

Solution

In order to overcome the problems above and keep your code neat and organized, it is wise to use standard naming conventions. These will help us define the variables and objects with names that contain a hint, usually 3 to 4 letters, stating their purpose or usage. As we develop our code, these naming formats will prevent the misuse of these variables in a way that deviates from their purpose.

For example:

If we define a variable to store the month , we can name the variable “mnth “. In the middle of the code there are chances that you could use this variable to store the month as a string in one place and an integer equivalent of a month in another place. This might later lead to confusion and maintenance overhead.

In this case, the variable can be defined with the the names below to avoid confusion:

  1.  “strmnth” or “str_mnth”  to store a string i.e. August for instance
  2. “intmnth” or “int_mnth” to store the month as a number i.e. 8 (for August)

VBA Naming Conventions

In VBA we have several datatypes which don’t need to be defined before use. For example, there is a common datatype named “variant” which can be used to store data of any type.

As I’ve been saying, there are predefined standard naming conventions that can be used for each such datatype.

The standard format to define a variable is :

[<Scope of the variable>] + <type of the variable> + < name of the variable>

Explanation

Scope of the Variable:

This defines the accessibility/visibility of a variable within/outside the framework/project/code modules. In general, scope is classified as either “Private” or “Public”. “Public” variables are also called “Global” variables.

The value should be denoted by a single letter as below.

  1. “m” for Private variables and
  2. “g” for Public/Global variables

However, the square brackets indicate that this is optional.

Types of variables:

This refers to the data type of the variable. The suggested list of short codes that can be used for each of the datatypes available in VBA are listed below.

S.no Data type Suggested short code Data type info
1 integer I (or) int 16-bit (4 bytes) signed integer
2 long l (or) lng 32-bit (8 bytes) signed integer
3 string s (or) str a VB string that can hold around 2 billion UNICODE characters
4 numeric n (or) num integer or long data type (4 to 8 bytes)
5 currency c (or) cur 64-bit (16 bytes) integer divided by 10000
6 variant v (or) var a VB variant – can hold data of any type
7 boolean b (or) bln a true or false value
8 double dbl a double-precision (8 bytes) floating point number
9 single Sng a single-precision (4 bytes) floating point number
10 float Flt a floating point number of any precision (any no. of bytes)
11 object obj (or) o a generic object variable (late binding)
12 control ctl (or) ctrl a generic control variable
13 decimal Dcl 16 bytes / 16-bit decimal value
14 Dictionary Dic or dict A dictionary object like an array to store key and value pairs
15 Array arr A single / multi dimensional list that can store values. It is a very common object used in all programming languages.
16 Workbook wrkbk An excel object that represents an excel workbook
17 Worksheet wrksht An excel object that represents an excel worksheet
18 Range rng A sequence of cells in an excel sheet
19 shapes shp A shape object of Ms. Office

Name of the variable:

The name of the variable is a user-defined name that explains the purpose of the variable.

For example:

  1. Fname indicates the firstname
  2. Lname indicates the lastname
  3. Dob indicates some date of birth
  4. Age indicates the age of a person
  5. Fath_age can indicate the father’s age

Examples for naming variables or objects in VBA

S.no Datatype and purpose of the variables / objects Suggested variable  or object names
1 Global string variable for Firstname gstrFname (or)  g_str_Fname
2 Private integer variable for Age mintage (or) m_int_age
3 Boolean variable to represent “finding some value” blnflag (or) bln_flag
4 String to represent a car model strcarmod (or) str_carmod
5 Global string variable to store username gstrusername (or) g_str_usr
6 Private string variable to store Password mstrpwd (or) m_str_pwd
7 Long variable to store rate of interest (ROI) lngROI (or) lng_roi
8 Date variable to store data of birth dtdob (or) dt_dob
9 Array to store the list of weekdays arrweekdays (or) arr_weekdays
10 Dictionary object to store username and passwords diccred (or) dic_cred
11 Worksheet to list the student details wrkshtstud (or) wrksht_stud
12 Workbook to hold all loan details wrkbk_loan (or) wrkbkloan
13 Shape to represent a note shpnote (or) shp_note
14 Range of cells to define and use for formatting header of a table rngheader (or) rng_header
15 A global variant to hold the salary gvarsal (or) g_var_sal
16 Private numeric variable to represent the year of birth mnumyob (or) m_num_yob
17 Currency variable to store the bank balance cur_bbal (or) curbbal

The code to declare these in the same order as above is available in the below code snippet.

Sub sample_coding()
Dim gstrFname, g_str_Fname As String
Dim mintage, m_int_age As Integer
Dim blnflag, bln_flag As Boolean
Dim strcarmod, str_carmod As String
Dim gstrusername, g_str_usr As String
Dim mstrpwd, m_str_pwd As String
Dim lngROI, lng_roi As Long
Dim dtdob, dt_dob As Date
Dim arrweekdays, arr_weekdays ' as array - late binding
Dim diccred, dic_cred As Dictionary
Dim wrkshtstud, wrksht_stud As Excel.Worksheet
Dim wrkbk_loan, wrkbkloan As Excel.Workbook
Dim shpnote, shp_note As Shape
Dim rngheader, rng_header As Range
Dim gvarsal, g_var_sal As Variant
Dim mnumyob, m_num_yob As numeric
Dim cur_bbal, curbbal As Currency
End Sub

Variable declarations using naming conventions

Naming form controls

A user form in any VBA project can have numerous controls that are automatically named sequentially.

For example, if we add 5 textboxes in a user form, they automatically have the names textbox1, textbox2, textbox3, textbox4 and textbox5. In this case, it’s difficult to keep in mind the purpose of each textbox.

Also, a user form generally has a label and an input control for every field of data stored in its backend database.

For instance, on a login user form , we can find a pair of controls (a label and a textbox) for Username. Here using naming conventions, we cannot name both controls str_username. It would be too confusing. Hence, we have to name the label lblusername and the textbox txtusername.

From this explanation, it probably is clear that VBA form controls also have naming conventions which need to be put to practice. Below is a list of form controls in VBA available with a short explanation. The naming conventions suggested for them are provided along with some examples .

S/N Control Description Suggested naming convention Example
1 Command button A button to do some action cmd cmdSubmit
2 Button A button to do some action btn btnCancel
3 Combo Box A dropdownlist from which the user can select values. It can be modified to be a’ textbox cum listbox’. cbo cboSubjects
4 CheckBox Used for selecting options. Any number of check boxes can can be selected at a time. This is found in a group. cb cbHobbies
5 CheckBox Used for selecting options. Any number of check boxes can can be selected at a time. This is found in the form of a list. cbl cblSubscriptions
6 List Box Similar to a combobox with the difference that multiple options can be selected. Depending on the length of the list and the display size, the control might ave scrollbars within. lst lstMonths
7 Text Box An input control with several flexible properties. txt txtName
8 Scroll Bar A scrollbar control that helps in navigation. scr scrStudentInfo
9 Spin Button Used to increase or decrease numeric value by clicking on up or down arrows that are displayed in the spin button spn spnDay
10 Option Button Used for true or false values. Only one option button in a group can have a true value at a time. On selecting one option, the other options automatically become deselected or false. opt optGender
11 Label Used to display some text to the user, which cannot be changed during runtime (static text). Eg: Labels and instructions lbl lblStuName
12 Image A control that can display images img imgPhoto
13 Toggle Button Button that has on and off positions tgl tglMode
14 UserForm A user form that contains all other controls frm frmLogin
15 Frame Can help in grouping the other controls fra frmAddress
16 Tabstrip Helps create tabs depending on your requirements tbs tbsTeachers
17 Multipage Multipage control groups other controls into multiple categories and helps to display several controls in a small area mup mupEmployee

Introduction to the Reddick VBA Naming Conventions

Reddick VBA, or RVBA, naming conventions are guidelines invented by several authors to help VBA developers be on the same page by using standard naming conventions.

These are named after and edited by Greg Reddick. The conventions are specially designed for the VBA language.

The suggested syntax for an object name is

[<prefixes>]<tag>[<BaseName>[<Suffixes>]]

In general, square brackets are used to indicate that the part of the syntax is optional. On observing these square brackets in the syntax closely, one can understand that a suffix is optional within the BaseName.

Syntax Explanation:

Prefixes:

These are in lowercase. They define or indicate the scope of the variable. RVBA guidelines prescribe several prefixes as mentioned below.

  1. ‘a’ – array object name
  2. ‘i’ – index
  3. ‘m’ – Private variables
  4. ‘s’ – local or Static variables
  5. ‘g’ – Global or Public variables
  6. ‘c’ – count of a specific object type
  7. ‘h’- a handle to any windows object
  8. ‘r’ – a parameter or argument that is passed by a reference

For Example:

  1. astrBookTitles
  2. hWndLogin
  3. iastrHobbies

Tag:

This represents the datatype of the variable. It should be completely in lowercase. There are a wide range of standard naming tags that can be used. Below are the categories into which the tags are classified along with examples for each.

S.no Categories of Tags Examples
1 Variables Dim intSum As Integer, lngHeight As Long, curSalary As Currency
2 Properties Dim frmsStudentdata As Collection
3 Collections Dim intsMarks As Collection
4 Constants Dim lngcPi As Long ‘ a constant value Pi= 3.14
5 Menu items mnuView, mnuInsert
6 Data types: Enumerated types Public Const estcErr104 As String = “Invalid data type”
Public Const estcErr105 As String = “Subscript out of range”
Dim estAddress as String
7 Data types:Classes and User-defined data types Public Type salPayroll
Dim salConveyance as salPayroll
8 Polymorphism Name the base class as “vehCar”
‘Declare
Dim vehBenz as vehCar'(derived class of vehCar)
Dim vehHyundai as vehCar'(derived class of vehCar)
9 Procedure names Built-in and User-defined:
txtPwd_OnChange, cmdSave_Click, cmdCancel_DblClick
PrintReport, ExtractData, DisplayStatus
10 Parameters Public Sub FindAge(ByVal dateInput As Date , ByRef rintAge As Integer)
11 Labels DateOfBirth, RateOfInterest

BaseName:       

These are word(s) that give information about what the variable represents. Uppercase needs to be used for the first letter of every word in the BaseName.

For Example:

  1. DataOfBirth
  2. DateOfJoining
  3. PenName

Suffixes:

Provide more information about the meaning or purpose of the BaseName. Uppercase needs to be used for the first letter of every word as in the BaseName. There is a wide range of standardized suffixes to use from. However, you are free to define your own suffix for any variable. RBVA provides some commonly used suffixes as below.

  1. Min – the absolute first element in any array or a similar object
  2. First – the first element in an array or a similar object
  3. Last – the last element in an array or a similar object
  4. Lim – the upper boundary of an array or similar object
  5. Max – the absolute last element of an array or a similar object
  6. Cnt – An item that is used as a counter for an object like an array.

For Example:

  1. iaintMarksMin
  2. iaintMarksMax
  3. iaintAverageCnt

While we follow the general naming conventions that are easy to remember and use, the RVBA naming guidelines can help in developing quality code. RVBA also provides a variety of naming conventions for objects used in Ms. Access, DAO,VB, ActiveX Data objects, ADO extension for DDL and Security (ADOX), JET & replication objects, common control and other custom control objects.

Personally, I would choose to follow the normal naming conventions (can also be user-defined) for a short term or small project to save yourself time. Maintenance would be limited too.

However, if you’re well versed in RBVA guidelines, then these cab be followed without a second thought. But when it comes to a permanent project that is going to be used in the long run, for example, a banking utility project, it would be a great option to follow the RVBA guidelines as there are allowances for the code to move from one developer to another for regular maintenance and enhancements.  

Conclusion

Naming conventions make our life easier when it is time to maintain our code or perform enhancements. They help us to organize a bunch of code in proper categories and help us understand the purpose and type of the objects.

Like this post? Please share to your friends:
  • Инвентаризация компьютерной техники excel
  • Имя не должно напоминать ссылку excel
  • Имя ячеек в excel изменились
  • Инвентаризация кассы бланк инв 15 скачать в excel
  • Имя можно присвоить в excel только