Перейти к содержимому

Dim в vba что это

  • автор:

Оператор Dim

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

Синтаксис

Dim [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ] [ , [ WithEvents ] varname [ ( [ subscripts ] ) ] [ As [ New ] type ]] . .

Синтаксис оператора Dim состоит из следующих частей:

Part Описание
WithEvents Необязательный параметр. Ключевое слово, указывающее, что varname — это объектная переменная, которая используется для ответа на события, запускаемые объектом ActiveX. Ключевое слово WithEvents можно использовать только в модулях классов. С помощью WithEvents можно объявить любое количество отдельных переменных, но нельзя создавать массивы с помощью WithEvents. Также нельзя использовать ключевое слово New с атрибутом WithEvents.
варнаме Обязательно. Имя переменной; соответствует стандартным соглашениям об именовании переменных.
Индексы Необязательный параметр. Измерения переменной массива (поддерживается объявление до 60 измерений). Аргумент subscripts использует следующий синтаксис: [ lowerTo ] upper [ , [ lowerTo ] upper ] .

Замечания

Переменные, объявляемые с помощью оператора Dim на уровне модуля, доступны всем процедурам внутри этого модуля. На уровне процедуры переменные доступны только внутри соответствующей процедуры.

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

Dim NumberOfEmployees As Integer 

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

Dim X As New Worksheet 

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

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

Если тип данных или тип объекта не указан, а инструкция Def_type_ в модуле отсутствует, переменная по умолчанию имеет значение Variant . При инициализации переменных числовой переменной присваивается значение 0, строке переменной длины — строка нулевой длины («»), а строка фиксированной длины заполняется нулями. Переменные типа Variant при инициализации получают значение Empty. Каждый элемент переменной определяемого пользователем типа инициализируется как отдельная переменная.

Когда оператор Dim используется в процедуре, обычно этот оператор Dim располагают в начале этой процедуры

Пример

В этом примере показывается, как используется оператор Dim для объявления переменных. В нем также показывается, как оператор Dim используется для объявления массивов. Нижняя граница по умолчанию для подстрочных индексов массива — 0. Ее можно переопределить на уровне модуля с помощью инструкции Option Base .

' AnyValue and MyValue are declared as Variant by default with values ' set to Empty. Dim AnyValue, MyValue ' Explicitly declare a variable of type Integer. Dim Number As Integer ' Multiple declarations on a single line. AnotherVar is of type Variant ' because its type is omitted. Dim AnotherVar, Choice As Boolean, BirthDate As Date ' DayArray is an array of Variants with 51 elements indexed, from ' 0 thru 50, assuming Option Base is set to 0 (default) for ' the current module. Dim DayArray(50) ' Matrix is a two-dimensional array of integers. Dim Matrix(3, 4)As Integer ' MyMatrix is a three-dimensional array of doubles with explicit ' bounds. Dim MyMatrix(1 To 5, 4 To 9, 3 To 5)As Double ' BirthDay is an array of dates with indexes from 1 to 10. Dim BirthDay(1 To 10)As Date ' MyArray is a dynamic array of variants. Dim MyArray() 

См. также

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

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

Dim в vba что это

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

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

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Оператор Dim (Visual Basic)

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

Синтаксис

[ ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] Dim [ WithEvents ] variablelist 

Компоненты

  • attributelist Необязательный элемент. См. раздел Список атрибутов.
  • accessmodifier Необязательный элемент. Может применяться один из перечисленных ниже типов.
    • Public
    • Защищены
    • Друг
    • Частная
    • Protected Friend
    • Частная защищенная
    Часть Описание
    variablename Обязательный. Имя переменной. См. раздел Declared Element Names.
    boundslist Необязательный элемент. Список границ каждого измерения переменной массива.
    New Необязательный элемент. Создает новый экземпляр класса при выполнении инструкции Dim .
    datatype Необязательный элемент. Тип данных переменной.
    With Необязательный элемент. Представляет список инициализаторов объектов.
    propertyname Необязательный элемент. Имя свойства в классе, который вы делаете экземпляром.
    propinitializer Требуется после propertyname =. Выражение, которое вычисляется и присваивается имени свойства.
    initializer Необязательный, если New параметр не указан. Выражение, которое вычисляется и присваивается переменной при ее создании.

    Комментарии

    Компилятор Visual Basic использует Dim оператор для определения типа данных переменной и других сведений, например, о том, какой код может получить доступ к переменной. В следующем примере объявляется переменная для хранения Integer значения.

    Dim numberOfStudents As Integer 

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

    Dim finished As Boolean Dim monitorBox As System.Windows.Forms.Form 

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

    Dim bottomLabel As New System.Windows.Forms.Label 

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

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

    Для объявления переменных вне процедуры используются следующие модификаторы доступа: Public , Protected , Friend , Protected Friend и Private . Дополнительные сведения см. в разделе Уровни доступа в Visual Basic.

    Ключевое слово Dim является необязательным и обычно опущен, если указан какой-либо из следующих модификаторов: Public , Protected , Friend , Protected Friend , Private Static ReadOnly Shared Shadows или . WithEvents

    Public maximumAllowed As Double Protected Friend currentUserName As String Private salary As Decimal Static runningTotal As Integer 

    Если Option Explicit параметр включен (по умолчанию), компилятору требуется объявление для каждой используемой переменной. Дополнительные сведения см. в разделе Оператор Option Explicit.

    Указание начального значения

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

    Dim quantity As Integer = 10 Dim message As String = "Just started" 

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

    ' Use explicit typing. Dim num1 As Integer = 3 ' Use local type inference. Dim num2 = 3 

    Вывод типа применяется на уровне процедуры. Он не применяется за пределами процедуры в классе, структуре, модуле или интерфейсе. Дополнительные сведения о выводе типа см. в разделах Оператор вывода вариантов и Вывод локального типа.

    Сведения о том, что происходит, когда тип данных или инициализатор не указан, см. в разделе Типы данных и значения по умолчанию далее в этом разделе.

    Инициализатор объектов можно использовать для объявления экземпляров именованных и анонимных типов. Следующий код создает экземпляр класса и использует инициализатор объектов для инициализации Student свойств.

    Dim student1 As New Student With

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

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

    Dim lastTime, nextTime, allTimes() As Date 

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

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

    Dim a, b, c As Single, x, y As Double, i As Integer ' a, b, and c are all Single; x and y are both Double 

    Массивы

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

    Можно указать нижнюю и верхнюю границы каждого измерения массива. Для этого включите boundslist внутри круглых скобок. Для каждого измерения boundslist задает верхнюю и при необходимости нижнюю границу. Нижняя граница всегда равна нулю независимо от того, указываете ли вы ее или нет. Каждый индекс может отличаться от нуля до его верхнего граничного значения.

    Следующие два оператора эквивалентны. Каждый оператор объявляет массив из 21 Integer элемента. При доступе к массиву индекс может варьироваться от 0 до 20.

    Dim totals(20) As Integer Dim totals(0 To 20) As Integer 

    Следующая инструкция объявляет двумерный массив типа Double . Массив содержит 4 строки (3 + 1) из 6 столбцов (5 + 1) каждый. Обратите внимание, что верхняя граница представляет максимально возможное значение индекса, а не длину измерения. Длина измерения равна верхней границе плюс единица.

    Dim matrix2(3, 5) As Double 

    Массив может иметь от 1 до 32 измерений.

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

    ' Declare an array with blank array bounds. Dim messages() As String ' Initialize the array. ReDim messages(4) 

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

    Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte 

    Можно объявить массив нулевой длины , объявив одно из измерений массива равным -1. Переменная, содержащая массив нулевой длины, не имеет значения Nothing . Массивы нулевой длины требуются определенными функциями среды CLR. При попытке получить доступ к такому массиву возникает исключение среды выполнения. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).

    Значения массива можно инициализировать с помощью литерала массива. Для этого заключите значения инициализации в фигурные скобки ( <> ).

    Dim longArray() As Long =

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

    Dim twoDimensions(,) As Integer = , > 

    Дополнительные сведения о литералах массива см. в разделе Массивы.

    Типы данных и значения по умолчанию

    В следующей таблице перечислены результаты различных сочетаний заданных типов данных и инициализаторов в операторе Dim .

    Указан тип данных? Указан инициализатор? Пример Результат
    нет Нет Dim qty Если параметр Option Strict отключен (по умолчанию), переменной присваивается значение Nothing .

    Если параметры Option Infer и Option Strict отключены, переменная получает тип данных Object .

    Если указать тип данных, но не указать инициализатор, Visual Basic инициализирует переменную значением по умолчанию для ее типа данных. В следующей таблице показаны значения инициализации по умолчанию.

    Тип данных Значение по умолчанию
    Все числовые типы (включая Byte и SByte ) 0
    Char Двоичное значение 0
    Все ссылочные типы (включая Object , String и все массивы) Nothing
    Boolean False
    Date 12:00 1 января года 1 (01.01.0001 00:00)

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

    Статическое время существования локальной переменной

    Время Static существования локальной переменной превышает время существования процедуры, в которой она объявлена. Границы времени существования переменной зависят от того, где объявлена процедура и является Shared ли она .

    Объявление процедуры Инициализированная переменная Переменная останавливает существующую
    В модуле При первом вызове процедуры При остановке выполнения программы
    В классе или структуре процедура имеет значение . Shared При первом вызове процедуры для определенного экземпляра либо для самого класса или структуры При остановке выполнения программы
    В классе или структуре процедура не является Shared При первом вызове процедуры для определенного экземпляра При освобождении экземпляра для сборки мусора (сборка мусора)

    Атрибуты и модификаторы

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

    На уровне модуля нельзя использовать модификатор Static для объявления переменных-членов. На уровне процедуры нельзя использовать Shared модификаторы доступа , Shadows , ReadOnly , WithEvents или любые модификаторы доступа для объявления локальных переменных.

    Вы можете указать, какой код может получить доступ к переменной, указав accessmodifier . Переменные-члены класса и модуля (за пределами любой процедуры) по умолчанию — закрытый доступ, а переменные-члены структуры — общедоступный доступ. Уровни доступа можно настроить с помощью модификаторов доступа. Модификаторы доступа нельзя использовать для локальных переменных (внутри процедуры).

    Можно указать WithEvents только переменные-члены, а не локальные переменные внутри процедуры. При указании WithEvents типа данных переменной должен быть определенный тип класса, а не Object . Нельзя объявить массив с WithEvents помощью . Дополнительные сведения о событиях см. в разделе События.

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

    Освобождение управляемых ресурсов

    Сборщик мусора платформа .NET Framework удаляет управляемые ресурсы без дополнительного написания кода с вашей стороны. Однако можно принудительно удалить управляемый ресурс, а не ждать сборщика мусора.

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

    Оператор Using автоматизирует процесс получения ресурса, выполнения набора инструкций и последующего удаления ресурса. Однако ресурс должен реализовывать IDisposable интерфейс . Дополнительные сведения см. в разделе Оператор using.

    Пример 1

    В следующем примере переменные объявляются с помощью оператора с различными Dim параметрами.

    ' Declare and initialize a Long variable. Dim startingAmount As Long = 500 ' Declare a local variable that always retains its value, ' even after its procedure returns to the calling code. Static totalSales As Double ' Declare a variable that refers to an array. Dim highTemperature(31) As Integer ' Declare and initialize an array variable that ' holds four Boolean check values. Dim checkValues() As Boolean =

    Пример 2

    В следующем примере перечислены простое число от 1 до 30. Область локальных переменных описаны в комментариях к коду.

    Public Sub ListPrimes() ' The sb variable can be accessed only ' within the ListPrimes procedure. Dim sb As New System.Text.StringBuilder() ' The number variable can be accessed only ' within the For. Next block. A different ' variable with the same name could be declared ' outside of the For. Next block. For number As Integer = 1 To 30 If CheckIfPrime(number) = True Then sb.Append(number.ToString & " ") End If Next Debug.WriteLine(sb.ToString) ' Output: 2 3 5 7 11 13 17 19 23 29 End Sub Private Function CheckIfPrime(ByVal number As Integer) As Boolean If number < 2 Then Return False Else ' The root and highCheck variables can be accessed ' only within the Else block. Different variables ' with the same names could be declared outside of ' the Else block. Dim root As Double = Math.Sqrt(number) Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root)) ' The div variable can be accessed only within ' the For. Next block. For div As Integer = 2 To highCheck If number Mod div = 0 Then Return False End If Next Return True End If End Function 

    Пример 3

    В следующем примере speedValue переменная объявляется на уровне класса . Для Private объявления переменной используется ключевое слово. Доступ к переменной можно получить с помощью любой Car процедуры в классе .

    ' Create a new instance of a Car. Dim theCar As New Car() theCar.Accelerate(30) theCar.Accelerate(20) theCar.Accelerate(-5) Debug.WriteLine(theCar.Speed.ToString) ' Output: 45 
    Public Class Car ' The speedValue variable can be accessed by ' any procedure in the Car class. Private speedValue As Integer = 0 Public ReadOnly Property Speed() As Integer Get Return speedValue End Get End Property Public Sub Accelerate(ByVal speedIncrease As Integer) speedValue += speedIncrease End Sub End Class 

    См. также раздел

    • Оператор Const
    • Оператор reDim
    • Оператор Option Explicit
    • Оператор Option Infer
    • Оператор Option Strict
    • Страница "Компиляция" в конструкторе проектов (Visual Basic)
    • Объявление переменной
    • Массивы
    • Инициализаторы объектов: именованные и анонимные типы
    • Анонимные типы
    • Инициализаторы объектов: именованные и анонимные типы
    • Практическое руководство. Объявление объекта с помощью инициализатора объектов
    • Вывод локального типа

    Совместная работа с нами на GitHub

    Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

    Dim в vba что это

    Описывает переменные и выделяет для них память.

    Dim [WithEvents] имяПеременной[([индексы])] [As [New] тип] [, [WithEvents] имяПеременной[([индексы])] [As [New] тип]] . . .

    Параметры
    WithEvents
    Необязательный. Ключевое слово, указывающее, что имяПеременной является объектной переменной, которая используется при отклике на события, генерируемые объектом ActiveX. Применяется только в модулях класса. Пользователь имеет возможность описать с помощью ключевого слова WithEvents произвольное количество отдельных переменных, однако при этом не допускается создание массивов. Не допускается также использование ключевого слова New с ключевым словом WithEvents.
    имяПеременной
    Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.
    индексы
    Необязательный. Размерности переменной массива; допускается описание до 60 размерностей. Для задания аргумента индексы используется следующий синтаксис:

    [нижний To] верхний [, [нижний To] верхний] . . .

    Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
    New
    Необязательный. Ключевое слово, включающее возможность неявного создания объекта. Если указано ключевого слова New при описании объектной переменной, новый экземпляр объекта создается при первой ссылке на объект, поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set. Ключевое слово New нельзя использовать для описания переменных любых внутренних типов данных, для описания экземпляров зависимых объектов, а также вместе с ключевым словом WithEvents. тип
    Необязательный. Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (для строк переменной длины), String* длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип. Для каждой описываемой переменной следует использовать отдельное предложение As тип.

    Замечания Переменные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре.
    Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом Integer.

    Dim NumberOfEmployees As Integer

    Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового образца листа электронной таблицы.

    Dim X As New Worksheet

    Если при описании объектной переменной не используется ключевое слово New, то для использования объекта, на который ссылается переменная, существующий объект должен быть с помощью инструкции Set присвоен переменной. До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что она не содержит ссылку на какой-либо определенный экземпляр объекта.
    Имеется также возможность применять инструкцию Dim с пустыми скобками для описания динамического массива. После описания динамического массива, воспользуйтесь инструкцией ReDim в процедуре для определения числа размерностей и элементов массива. При попытке переопределить размерности переменной-массива, чей размер был явно указан в инструкции Private, Public или Dim, возникает ошибка.
    Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant.
    При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают при инициализации значение Empty. Каждый элемент переменной определяемого пользователем типа при инициализации получает значение, которые он получил бы, если бы являлся отдельной переменной.
    При использовании инструкции Dim в процедуре ее обычно помещают в начало процедуры.

    Пример
    В данном примере инструкция Dim используется для объявления переменных и массивов. По умолчанию нижняя граница индексов массива равняется 0; для ее изменения следует использовать инструкцию Option Base на уровне модуля.

    ' По умолчанию AnyValue и MyValue являются переменными типа Variant ' и имеют пустые значения. Dim AnyValue, MyValue ' Явно объявляет переменную типа Integer. Dim Number As Integer ' Несколько объявлений на одной строке. AnotherVar является переменной ' типа Variant, поскольку ее тип опущен. Dim AnotherVar, Choice As Boolean, BirthDate As Date ' DayArray является массивом, состоящим из 51 элемента типа Variant. ' Индексы элементов массива лежат в диапазоне от 0 до 50, если для ' текущего модуля используемая по умолчанию нижняя граница элементов ' массива (0) не изменена с помощью инструкции Option Base. Dim DayArray(50) ' Matrix является двумерным массивом значений типа Integer. Dim Matrix(3, 4) As Integer ' MyMatrix является трехмерным массивом значений типа Double с явно ' заданными границами индексов. Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double ' BirthDay является массивом дат с индексами от 1 до 10. Dim BirthDay(1 To 10) As Date ' MyArray является динамическим массивом значений типа Variant. Dim MyArray()

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

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