Как присвоить переменной значение ячейки в excel vba
Перейти к содержимому

Как присвоить переменной значение ячейки в excel vba

  • автор:

Объявление переменных

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

В примере ниже создается переменная и указывается тип данных «String».

Dim strName As String 

Если данный оператор отображается в процедуре, переменная strName может использоваться только в этой процедуре. Если же оператор отображается в разделе объявлений модуля, переменная strName доступна для всех процедур данного модуля, но недоступна для процедур других модулей проекта.

Чтобы предоставить доступ к переменной всем процедурам проекта, перед ней нужно поставить оператор Public, как показано в примере ниже:

Public strName As String 

Дополнительные сведения об именовании переменных см. в статье Правила именования в Visual Basic.

Переменные могут быть объявлены одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * length (для строк фиксированной длины), Object или Variant. Если тип данных не указан, по умолчанию присваивается тип данных Variant. Вы также можете создать определяемый пользователем тип с помощью оператора Type.

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

В приведенном ниже операторе переменные intX , intY и intZ объявлены типом Integer.

Dim intX As Integer, intY As Integer, intZ As Integer 

В приведенном ниже операторе intX и intY объявлены как Variant и только intZ объявлен как тип Integer.

Dim intX, intY, intZ As Integer 

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

Сокращение для объявления переменных x и y типом Integer в приведенном выше операторе

Dim intX%, intY%, intZ as Integer 

Сокращение для типов: % -integer; & -long; @ -currency; # -double; ! – Single; $ – String

Оператор Public

Используйте оператор Public для объявления общих переменных на уровне модуля.

Public strName As String 

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

Оператор Private

Используйте оператор Private для объявления частных переменных на уровне модуля.

Private MyName As String 

Частные переменные могут использоваться только процедурами одного модуля.

На уровне модуля оператор Dim является эквивалентным оператору Private. Вы можете использовать оператор Private, чтобы упростить чтение и интерпретацию кода.

Оператор Static

Если для объявления переменной в процедуре используется оператор Static вместо оператора Dim, объявленная переменная сохраняет свое значение между вызовами в этой процедуре.

Оператор Option Explicit

В Visual Basic можно неявно объявить переменную, просто используя оператор присвоения значения. Все неявно объявленные переменные относятся к типу Variant. Для переменных типа Variant требуется больший объем памяти, чем для большинства других переменных. Приложение будет работать эффективнее, если переменные будут явно объявленными и им будет присвоен определенный тип данных. Явное объявление переменных снижает вероятность возникновения ошибок, вызванных конфликтом имен или опечатками.

Если вы не хотите, чтобы в Visual Basic были неявные объявления, то оператор Option Explicit должен стоять в модуле перед всеми процедурами. Этот оператор требует явного объявления всех переменных модуля. Если модуль содержит оператор Option Explicit, то при обнаружении необъявленной ранее переменной или опечатки в ее имени Visual Basic выдаст ошибку времени компиляции.

В программной среде Visual Basic имеется возможность задавать параметр, который будет автоматически включать оператор Option Explicit во все новые модули. Справочная информация по изменению параметров среды Visual Basic предоставлена в документации приложения. Обратите внимание, что данный параметр не меняет уже написанный код.

Статические и динамические массивы нужно объявлять в явном виде.

Объявление объектной переменной для автоматизации

При использовании приложения для управления объектами другого приложения необходимо указать ссылку на библиотеку типов этого другого приложения. Когда ссылка указана, можно объявлять объектные переменные в соответствии с наиболее подходящими для них типами. Например, если вы указываете ссылку на библиотеку типов Microsoft Excel при работе в Microsoft Word, то можете объявить переменную типа Worksheet внутри Word, чтобы она представляла объект Worksheet приложения Excel.

При использовании другого приложения для управления объектами Microsoft Access, как правило, можно объявлять объектные переменные согласно наиболее подходящим для них типам. Вы можете также использовать ключевое слово New для автоматического создания нового экземпляра объекта. Однако может возникнуть необходимость указать, что объект принадлежит Microsoft Access. Например, при объявлении объектной переменной, представляющей форму Access внутри Visual Basic, необходимо сделать различимыми объект Form приложения Access и объект Form приложения Visual Basic. Для этого следует включать имя библиотеки типов в объявление переменной, как показано в примере ниже:

Dim frmOrders As New Access.Form 

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

В примере ниже показано, как объявлять переменную, представляющую экземпляр объекта Application Access в приложении, которое не распознает объектные типы Access. Затем приложение создает экземпляр объекта Application.

Dim appAccess As Object Set appAccess = CreateObject("Access.Application") 

В документации приложения предоставлена информация о поддерживаемом им синтаксисе.

См. также

  • Сводка типов данных
  • Сводка по ключевым словам для переменных и констант
  • Темы по основам Visual Basic

Поддержка и обратная связь

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

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Отправить и просмотреть отзыв по

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

В популярных языках программирования переменная содержит одно значение. Чтобы присвоить значение 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

Как присвоить переменной значение ячейки в excel vba

1. Присвоить переменной значение ячейки, находящейся в ТЕКУЩЕМ ряду в столбце «E» 2.Вопрос по автофильтру

Здравствуйте!
К вам пара вопросов, если ответите, то очень мне поможете.

Итак, вопрос 1. Выделена произвольная ячейка в какой-то определённой строке таблицы. Как мне присвоить переменной x значение ячейки, располагающейся в ТЕКУЩЕЙ строке, столбце E?

Вопрос 2. В таблице с помощью автофильтра произведена выборка данных, например, по фильтру имеем одну единственную строку:

«Г.Симоняка ул.» (ячейка A35), «д.23» (ячейка B35) и «ЖКС1» (ячейка C35)

Как мне присвоить переменной X значение, находящееся в третьей ячейке (в данном случае C35). Проблема в том, что в результате выборки это будет не всегда ячейка C35, а может быть C12, C19, C39 — в общем, всё что угодно.

Изображения

Snap1.png (3.3 Кб, 196 просмотров)

Использование переменных в под процедурах Excel в Visual Basic для приложений

В этой статье описано, как использовать переменные Microsoft Excel под процедурах в Microsoft Visual Basic для приложений.

Дополнительные сведения

Переменные в под процедуре

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

  • Как объявляются переменные.
  • Процедуры и проекты, которые могут использовать переменную.
  • Время жизни переменной.

Объявление переменной в макросе

Самый простой способ объявить переменную в макросах — использовать отчет Dim. В следующей строке две переменные объявлялись как integers(integers).

Dim x As Integer, y As Integer

Если для переменных x и y заданы целые числа, вы указываете Visual Basic выделить достаточно памяти для переменной целого числа (по 2 на x и y) и что данные, хранимые в x или y, являются целым числом в период между -32768 и 32767.

ПРИМЕЧАНИЕ: Если вы объявляете несколько переменных с помощью одной выписки Dim, необходимо указать тип данных для каждой переменной.

Если не указать тип данных для каждой переменной, как в следующем коде Visual Basic, то переменная y будет настроена как переменная с типом данных типа integer. Переменная x будет иметь тип типа variant:

Dim x, y As Integer

Дополнительные сведения см. в приведенной ниже таблице Variant.

Чтобы выполнить проверку переменной, выполните следующие действия:

  1. Сохраните и закроите все открытые книги, а затем откройте новую книгу.
  2. Запустите редактор Visual Basic (нажмите ALT+F11).
  3. В меню Вставка выберите пункт Модуль.
  4. Введите следующий код:

Вы получите ошибку во время запуска, так как «ошибка» не является integer, и вы пытаетесь назначить это строковую величину для переменной x.

Сводка по типам данных

Это распространенные типы данных переменных:

распространенные типы данных переменных

тип данных Variant

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

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

Недостатком является то, что для переменных требуется не менее 16байт памяти. 16 bytes of memory can be significant in large procedures or in complex modules.

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

Измените код макроса Variable_Test на:

Sub Variable_Test() Dim x, y x = "string" y = 1.23 MsgBox "the value of x is " & x & _ Chr(13) & "the value of y is " & y End Sub

Запустите Variable_Test макрос.

Вы не получите сообщение об ошибке, так как вы можете назначить что-либо переменным x и y.

ПРИМЕЧАНИЕ: Вы также можете не использовать следующую строку, и макрос будет по-прежнему работать, так как переменные x и y будут рассматриваться как типы данных Variant:

Область действия переменной

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

Область на уровне процедуры

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

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

  1. Вставка нового модуля в проект.
  2. Введите в этот модуль оба макроса:
    Sub Macro1() Dim x As Integer x = 10 MsgBox «x, as seen by Macro1 is » & x ‘next line runs Macro2 Macro2 End Sub Macro2() MsgBox «x, as seen by Macro2 is » & x End Sub
  3. Запустите Макрос1, и вы получите следующее сообщение:

Макрос2 не отображает значение переменной x, так как переменная x является локальной для параметра Macro1.

Объем личных и общедоступных модулей

Вы можете определить переменные в разделе объявлений модуля (в верхней части модуля, над всеми под процедурами) и настроить область действия переменной с помощью открытой выписки, затемной или закрытой выписки. Если перед переменной поместить открытое заявление, переменная будет доступна всем макросам во всех модулях проекта. Если перед переменной поместить перед переменной утверждение Dim или Private, переменная будет доступна только макросам в модуле, в котором она объявлена.

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

  1. Сохраните и закроите все открытые книги, а затем откройте новую книгу.
  2. Запустите редактор Visual Basic редактора.
  3. Вставка модуля в проект.
Type the following code into this module: Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub

Public x As Integer

Dim x As Integer

ПРИМЕЧАНИЕ: Если вы хотите ограничить область действия переменной модулем, в котором она объявлена, используйте privatestatement вместо dim. Оба этих эффекта будут одинаковыми, но при использовании закрытой выписки область действия будет более четкой.

Срок жизни переменной

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

Инициализация значения переменной

При запуске макроса все переменные инициализируются со значением. Числовая переменная инициализирована до нуля, строка переменной длины — в нулевую строку («»), а строка фиксированной длины заполняется кодом ASCII 0. Переменные Variant инициализируются как пустые. Пустая переменная представлена нулем в числовом контексте и пустой строкой («») в строковом контексте.

Переменные уровня процедуры

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

Чтобы продемонстрировать работу переменных на уровне процедуры, выполните указанные ниже действия.

  1. Вставка нового модуля в проект.
  2. В этом модуле введите оба макроса:

Вы получаете те же сообщения, что и в шагах 3–6, так как как макрос1 перестал работать на шаге 6, значение переменной x было потеряно. Таким образом, при повторном повторе макроса 1 в шаге 7 в первом сообщении будет показано значение x в качестве нуля (инициализированное значение).

Статическое ключевое слово

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

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

Change the code in Macro1 to: Sub Macro1() 'set x as a procedure level variable Static x As Integer MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub

Значения, которые отображаются в сообщениях, во второй раз отличаются, так как переменная x объявляется как статическая переменная, а значение переменной сохраняется после первого запуска макроса Macro1.

ПРИМЕЧАНИЕ: Если у вас есть переменная уровня модуля, ее время существования будет таким же, как если бы она была статической переменной на уровне процедуры.

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

Change the code in the module that contains Macro1 to the following: Dim x As Integer 'create a module-level variable Sub Macro1() MsgBox "the initialized value of x is " & x x = x + 10 MsgBox "x is " & x End Sub

Значения, которые отображаются в сообщениях, во второй раз отличаются, так как переменная x объявлена как статическая переменная и сохраняет значение после первого запуска макроса Macro1.

Сброс проектов для сброса переменных

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

Если вы сделаете это для проекта Macro1, а затем повторно запроизводили макрос1,значение переменной x инициализировано до нуля, и вы получите первое сообщение:

the initialized value of x is 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *