Объектные переменные vba excel

Return to VBA Code Examples

In this Article

  • Defining Object Variables
  • Declaring the Object Variable
  • Set Value
  • Object Examples in Excel
    • Workbook Object
    • Worksheet Object
    • Range Object
    • Shape Object

This tutorial will teach you how to define object variables using the Set statement in VBA.

Defining Object Variables

Objects are the cornerstone of Microsoft Office – without objects, we cannot achieve anything.  In Excel, objects include the Workbook, Worksheet or Range Objects. In Microsoft Word, examples are the Document or Table object. Each object has a variety of Properties and Methods that can be programmed to control the behavior of that object.

Declaring the Object Variable

Before we can reference the object in code, and therefore control the object, we need to declare the object. We can do this using the Dim Statement.

Dim wkb as Workbook
Dim wks as Worksheet
Dim Rng as Range
Dim wdDoc as Document
Dim wdTbl as Table
Dim shp as Shape

This Dim declaration can occur inside a procedure:

vba objects 1

or outside a procedure at the module-level:

vba objects 2

If the variable is declared at the module-level (outside the procedure), the variable can be used throughout the module.

If the object variable is declared with the Public statement then the variable can be used throughout the VBA Project:

vba objects 3

Set Value

Once you have declared the object, you need to assign a value to the object. This must be done using the Set statement and can only be done within a Procedure.

Sub SetObjects()
   Set wkb = ActiveWorkbook
   Set wks = Sheet1
   Set rng = Range("A1:G4")
End Sub

Note: This is different than assigning values to non-object variables. You MUST use the Set statement to assign the object to the variable. If you do not, you’ll receive an error:

vba objects error

Once you have assigned a value to the object, you can then write code to control the behavior or manipulate the object.

Object Examples in Excel

Workbook Object

Once you have declared a workbook variable, you can then assign a workbook to that object and use the Properties and Methods available to manipulate that object. In the example below we are going to save a workbook.

Sub WorkbookObject()
'declare the workbook object
   Dim wkb as Workbook
'assign an unsaved workbook to the object
   Set wkb = Workbooks("Book1")
'save the workbook
   wkb.SaveAs "C:datatestbook.xlsx"
'close the workbook
   wkb.close
'remember to release the object
   Set wkb = Nothing
End Sub

Worksheet Object

Similarly you can manipulate a worksheet or worksheets once you have declared the worksheet as a variable. In the example below, we rename Sheet1 and Sheet2.

Sub WorksheetObject()
   Dim wks1 As Worksheet
   Dim wks2 As Worksheet
'initialize the objects
   Set wks1 = Sheet1
   Set wks2 = Sheet2
'rename the sheets
   wks1.Name = "Customers"
   wks2.Name = "Products"
'set the objects to nothing
   wks1 = Nothing
   wks2 = Nothing
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Range Object

The Range object is one of the most  useful objects to manipulate in Excel. In the example below, we bold Range A1 to E1 and format it with a bottom border.

Sub RangeObject()
Dim rng1 As Range
'intialize the range
   Set rng = Range("A1:E1")
'bold the range and set the bottom border
   rng.Font.Bold = True
   With rng1.Borders(xlEdgeBottom)
      .LineStyle = xlContinuous
      .ColorIndex = 0
      .TintAndShade = 0
      .Weight = xlThin
   End With
End Sub

Shape Object

You can also use object variables to work with shapes.

Sub AddShape()
   Dim shp As Shape
'create the shape
   Set shp = ActiveDocument.Shapes.AddShape(msoShapeSmileyFace, 68.25, 225.75, 136.5, 96#)
   With shp
'change inside colour and style
      .Fill.ForeColor.RGB = RGB(255, 255, 0)
      .Fill.Solid
'adjust the smile!
      .Adjustments.Item(1) = 0.07181
   End With
End Sub

Объектные переменные

В дополне­ние к типам Byte, Integer, Long,
Single, Double и String VBA также имеет тип Object.
Переменные или выражения типаObject
ссылаются на объект VBA или на объект,
принадлежащий приложению, напримерExcel-объектыWorkbook,
Worksheet
и Range.

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

Dim
myObject
As
Object

Можно задавать переменную
myObject,
создаваемую
предшествующим опера­тором Dim,
чтобы она содержала
ссылку на любой объект VBA или объект
приложения. Если вы собираетесь
использовать переменную типа Object
для некоторых
специфических типов объектов, можно
также объявлять объектную пе­ременную
для этого специфического типа объекта:

Dim
InstBook
As
Workbook

Объектную переменную
InstBook,
создаваемую этим
оператором Dim,
можно использовать
только для сохранения ссылок на объекты
Workbook;
при попытке присвоить
переменной InstBook
ссылку на объект Range
или Worksheet
VBA
ото­бражает сообщение об ошибке
несовпадения типов. Аналогично, следующее
пред­ложение объявляет объектную
переменную, которая может сохранять
только объ­екты Document:

Dim
InstDoc
As
Document

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

Объектное выражение может
состоять из объектных переменных,
объектных ссылок или объектного метода
или свойства, которое возвращает объект.
Нельзя использовать переменные типа
Object
или объектные выражения
в арифметических, логических или
операциях сравнения. Объектная ссылка,
соз­данная с помощью объектного
выражения или сохраненная в объектной
перемен­ной, в действительности,
является только адресом, указывающим
место в памяти компьютера, где сохранен
объект, на который выполняется ссылка.
Поскольку объектная ссылка — это адрес
памяти, арифметические, логические
операторы и операторы сравнения не
имеют смысла.

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

Оператор Set
имеет следующий
синтаксис:

Set
Переменная=Объект

Переменная
— это любая объектная
переменная или переменная типа Variant.
Объект
— любая допустимая объектная ссылка;
это может быть другая объектная переменная
или объектное выражение. Если Переменная
— переменная,
объявленная с каким-либо определенным
типом (например, Range
или Workbook),
этот тип должен быть
совместим с объектом, на который ссылается
Объект.

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

Dim
InstSheet
As
Worksheet

Set
InstSheet
= Application.ActiveSheet

Чтобы задать отдельный
объект в выражении или объектную
переменную для ссылки на этот объект,
используйте методы и свойства, возвращающие
объекты, такие как свойства ActiveWorkbook
и ActiveSheet
объекта Application
или метод Cells
объекта Worksheet
(в Excel).
Аналогичные принципы применимы в Word:
используйте свойство ActiveDocument
объекта Application
для получения ссылки
на текущий документ и так далее.

Соседние файлы в папке Лабораторные

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

В популярных языках программирования переменная содержит одно значение. Чтобы присвоить значение 4 переменной х, можно использовать выражение х = 4. Рассмотрим отдельную ячейку в Excel. Существует много свойств, описывающих ячейку.

Ячейка может содержать числовое значение, для нее указывается размер и цвет шрифта, строки, столбца, определяется формула, примечание и т.п. В VBA можно создать «суперпеременную», которая будет содержать всю информацию о ячейке или даже целом объекте. Выражение х = Range("A1") присваивает переменной х текущее значение ячейки A1. Для создания объектной переменной применяется ключевое слово Set.

Set х = Range("A1)

Вы создали «суперпеременную», которая содержит все свойства ячейки.

Вместо использования переменной с одним значением можно работать с переменной, в которой предоставляется доступ к значениям многих свойств, связанных с этой переменной. Можете использовать выражение х.Formula, чтобы увидеть формулу в ячейке А1, или х.Font.colorlndex, чтобы определить цвет ячейки.

В примерах, приводимых в этом разделе, часто используется объектная переменная PT. Она применяется в тех случаях, когда определяется ссылка на сводную таблицу. Если, например, в коде содержится ссылка ActiveSheet.PivotTables("PivotTable1"), можно воспользоваться переменной объекта РТ, чтобы уменьшить объем кода.

Использование конструкций with и End with для уменьшения объема кода

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

	PT.NullString=0
	PT.RepeatAllLabels xlRepeatLabels
	РТ.ColumnGrand=False
	PT.RowGrand-Fa1se
	PT.RowAxisLayout xlTabularRow
	PT.TableStyle2="PivotStyleMediuml0"
	PT.TableStyleRowStripes=True

При выполнении перечисленных выше строк кода интерпретатор VBA должен постоянно расшифровывать, что означает ссылка «РТ». Чтобы ускорить выполнение кода, укажите ссылку РТ один раз. Для каждой строки кода, которая начинается точкой, подразумевается ссылка на объект, указанный с помощью конструкции With. Блок кода завершается конструкцией End With.

With РТ
	.NullString=0
	.RepeatAllLabeIs xlRepeatLabels
	.ColumnGrand=False
	.RowGrand-False
	.RowAxisLayout xlTabularRow
	.TableStyle2="PivotStyleMediuml0"
	.TableStyleRowStripes=True
End With

Обращение к объекту

Контейнеры

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

Самый старший контейнер объектов MS Excel — это приложение Application. Приложение — это контейнер для всех открытых рабочих книг, и в то же время приложение содержит такой глобальный объект, как строка меню, который доступен любой рабочей книге. Рабочий лист представляет пример того, что объект может быть частью нескольких контейнеров или коллекций одновременно: он входит в рабочую книгу, с одной стороны, а с другой стороны — является частью коллекции Sheets и коллекции Worksheets.

Преимущества

  • Рассмотрение объекта в качестве контейнера позволяет уточнить, сославшись на контейнер, с каким именно объектом производится действие в процедуре.

Если в рабочей книге имеются два рабочих листа Sheet1 и Sheet2, то запись Worksheets(«Sheet1»).Range(«A1») указывает на ячейку A1 рабочего листа Sheet1, а запись Worksheets(«Sheet2»).Range(«A1») указывает на ячейку A1 рабочего листа Sheet2.

Ссылка на объект

Объект в VBA указывается при помощи ссылки. Запись Workbookscross«).Worksheets(«Sheet2») указывает на объект, являющийся листом с именем Sheet2 в рабочей книге cross, отличая его, таким образом, от листа с тем же именем, но в другой рабочей книге.

Важно

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

Для объектов, относящихся к классу globals (например, активная рабочая книга, активная ячейка рабочего листа, константа), спецификатор Application можно опустить.

Оператор With

В VBA перед обращением к каждому из методов или свойств объекта требуется наличие ссылки на объект. Конструкция With…End With позволяет применить последовательность операторов к объекту, указав его имя только один раз в операторе With. Благодаря этому программа становится менее громоздкой, освобождаясь от повторений ссылки на объект.

Синтаксис оператора

With Object
[statements]
End With
  • Objectимя объекта;
  • statementsпоследовательность операторов.

Первая строка этой структуры идентифицирует объект, с которым будут производиться действия. В последующих операторах используются свойства и методы идентифицированного объекта. Оператор End With является закрывающей скобкой для оператора With. Часто подобная структура записывается при помощи макрорекордера.

Внимание

  • Каждый оператор внутри блока statements начинается с точки.

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

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

Например, установить полужирный шрифт для первой строки активного листа можно оператором ActiveSheet.Rows(1).Font.Bold = True или, используя объектную переменную, можно предложить два способа записи:

Здесь оператор Set создает объект, тип которого установлен при описании объектной переменной. Далее можно обратиться к свойствам или методам созданного объекта. В первом случае это объект типа Range, во втором случае — тип объекта Font.

Преимущества

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

Объект Application

При открытии MS Excel автоматически становится доступным объект Application с его свойствами и методами. Объект Application — корневой объект приложения. В него вложены остальные объекты приложения. Доступ к ним осуществляется посредством свойств-участников объекта Application.

Для создания ссылки на объект Application используется свойство Application.

Примеры операторов

Application.Windows(«AIR.XLS «).Activate Оператор активизирует рабочую книгу
Application.Goto Range(«B3:C5») Оператор выделяет интервал ячеек на активном рабочем листе

Многие свойства объекта Application используются без ссылки на объект Application, так как они возвращают объекты, относящиеся к классу globals.

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

Свойства, название которых начинается со слова Active, возвращают активный объект соответствующего типа. Для этих свойств необязательно указывать ссылку на объект Application, так как они входят в класс globals. Некоторые из этих свойств являются одновременно свойствами нескольких объектов.

Свойства, возвращающие активный или выделенный объект

Свойство Объект Действие Возвращаемый объект
ActiveCell Application, Window Возвращает активную ячейку Range
ActiveSheet Application, Window, Workbook Возвращает активный лист. Это может быть рабочий лист, лист диаграмм Sheet
ActiveWorkbook Application Возвращает активную рабочую книгу Workbook
ActiveWindow Application Возвращает активное окно Window
Selection Application, Window Возвращает выделенный объект Различные типы объектов

Так как перечисленные в таблице свойства возвращают объекты, при записи операторов для активных объектов используются методы или свойства объектов соответствующих типов.

Примеры

Оператор Комментарий
ActiveCell.Font.Bold=True Устанавливает полужирный шрифт текста активной ячейки
ActiveSheet.Name=»Проба» Изменяет название активного листа рабочей книги
MsgBox ActiveWorkbook.Fullname Высвечивает полное имя рабочей книги, включая путь и имя файла
Selection.NumberFormat=»0.00″ Устанавливает числовой формат с двумя знаками после запятой для ячеек выделенного интервала
ActiveCell.Value=10

Application.ActiveCell.Value=10

ActiveWindow.ActiveCell.Value=10

Application.ActiveWindow.ActiveCell.Value=10

Присваивают активной ячейке значение 10. Приведенные примеры доступа к активной ячейке равносильны
Worksheets(«Sheet1»).Activate

Selection.Clear

Очищает предварительно выделенный на листе Sheet1 объект, например, интервал ячеек
Если никакой объект не выделен, то свойство Selection возвращает значение Nothing и очистка не выполняется
Worksheets(«Sheet1»).Activate

MsgBox «Тип объекта » & TypeName(Selection)

Высвечивает тип предварительно выделенного на листе Sheet1 объекта

Понравилась статья? Поделить с друзьями:
  • Объектной моделью excel это
  • Объектно ориентированное программирование excel vba
  • Объектная смета скачать в excel
  • Объектная смета пример excel
  • Объектная модель документа excel