Архив
Публикации с меткой ‘Функции VBA’

- DoEvents() — очень важная функция. Она позволяет на время отвлечься от выполнения какой-то операции VBA и передать управление операционной системе, чтобы обработать накопившиеся в операционной системе события (например, нажатия клавиш пользователем). После этого продолжение операции VBA продолжается. Если у Вас работает очень долгая операция (поиск на дисках, обработка большого объема данных и т.п.) и Вы хотите дать пользователю возможность быстро прервать эту операцию, можно выполнять эту команду, например, каждый раз после обработки определенной «порции» данных.
- Environ() — возвращает абсолютный путь для переменных окружения компьютера (полный список переменных, доступных на Вашем компьютере, можно просмотреть, если в командной строке выполнить команду SET). Например, Вам нужно записать что-то в файл во временном каталоге. Абсолютный путь к временному каталогу на вашем компьютере можно получить так:
- GetAllSettings() — получить (в виде двухмерного массива) из реестра все параметры, которые относятся к указанному приложению.
- SaveSetting() — позволяет записать информацию в реестр
- DeleteSetting() — удалить информацию из реестра.
- GetSetting() — позволяет получить информацию об определенном параметре.
Эти методы позволяют обращаться только к одному очень далекому уголку реестра в ветви HKEY_CURRENT_USERS. Обращаться к другим параметрам реестра при помощи этих методов бесполезно. Для работы с реестром лучше использовать объектную библиотеку Windows Script Host Object Model, которая также есть на любом компьютере под управлением Windows 2000, XP и 2003. Нужный объект называется WSHShell, методы — RegRead(), RegWrite() и RegDelete(). Справку по объектам этой библиотеки можно найти на сайте Microsoft (www.microsoft.com/scripting).
- Partition() — позволяет определить, к какому диапазону из наборов значений относится переданное число и возвращает описание этого диапазона(в виде строки). Обычно используется при выполнении запросов к базам данных.
- QBColor() — позволяет перевести обозначение цвета из древнего номерного обозначения с возможными 16 значениями в RGB-код, который понимается VBA. Обычно используется при переделке унаследованных программ.
- RGB() — позволяет вернуть цветовой код, который можно использовать для присвоения цвета в коде, приняв три значения для цветов: красного (Red), зеленого (Green) и синего (Blue). Значение для каждого из основных цветов могут варьироваться от 0 до 255. Например, самый зеленый из возможных цветов получится, если переданные этой функции значения будут выглядеть как RGB(0,255,0).
- Shell() — позволяет запустить из VBA внешний программный файл и вернуть информацию о его Program ID в операционной системе. Обычно используется опытными разработчиками при применении ими в программах возможностей Windows API. С практической точки зрения эту функцию можно использовать для запуска любых внешних программ из вашего приложения, хотя, с моей точки зрения, применение специальных объектов WshShell и WshExec из библиотеки Windows Script Host Object Model удобнее(можно передавать в окно клавиатурные комбинации, принимать и передавать значения через командную строку и т.п.). Эта библиотека есть на любом компьютере Windows, справку по ней можно найти на сайте www.microsoft.com/scripting.
- TypeName() — функция, которая возвращает имя типа данных для переданной ей переменной. Очень удобна для определения типа данных для значения, полученного из базы данных или путем вызова метода какого-то объекта.
- VarType() — делает почти то же самое, но вместо имени возвращает числовой код, который обозначает тип данных. Можно использовать для программных проверок типов данных для переменных.

- CurDir() - функция, которая возвращает путь к текущему каталогу, в котором будут сохраняться файлы нашего приложения по умолчанию.
- Dir() — позволяет искать файл или каталог по указанному пути на диске.
- EOF() — при операции записи в файл на диске эта функция вернет True, если вы находитесь в конце файла. Обычно используется при работе с текстовыми файлами — .txt. При сохранении книг Excel лучше использовать стандартные методы: Save и SaveAs.
- Error() - позволяет вернуть описание ошибки по ее номеру. Генерировать ошибку нужно при помощи метода RaiseError() специального объекта Er.
- FileAttr() — позволяет определить, как именно был открыт Вами файл в файловой системе: на чтение, запись, добавление, в двоичном или текстовом режиме и т.п.
- FileDateTime() — позволяет получить информацию о последнем времени обращения к указанному Вами файлу. Если к файлу после создания ни разу не обращались, то это будет время создания файла.
- FileLen() — позволяет определить длину указанного файла в байтах.
- FreeFile() — позволяет определить следующую свободную цифру, которую можно использовать как номер файла при его открытии.
- GetAttr() — возможность обратиться к файлу к файловой системе и получить информацию об его атрибутах (скрытый, доступен только для чтения, архивный и т.п.)
- Input() — позволяет считать информацию из открытого файла. Например, считать информацию из файла C:Text1.txt и вывести ее в окно Immediate можно так:
Dim MyChar
Open "C:Text1.txt" For Input As #1 'Открываем файл функцией Open() на чтение
Do While Not EOF(1) 'пока файл не кончился
' Получаем по одному символу и добавляем его к предыдущим
MyChar = MyChar & Input(1, #1)
Loop
Close #1 ' Закрываем файл
'Выводим его содержание в окно Immediate
'(отобразить Immediate: Ctrl+G в окне редактора VBA)
Debug.Print MyChar
Dim MyChar
Open "C:Text1.txt" For Input As #1 'Открываем файл функцией Open() на чтение
Do While Not EOF(1) 'пока файл не кончился
' Получаем по одному символу и добавляем его к предыдущим
MyChar = MyChar & Input(1, #1)
Loop
Close #1 ' Закрываем файл
'Выводим его содержание в окно Immediate
'(отобразить Immediate: Ctrl+G в окне редактора VBA)
Debug.Print MyChar
- InputB() — позволяет указывать количество байт, которые надо скачать из файла.
- Loc() — от Location, то есть местонахождение — возвращает число, которое определяет текущее место вставки или чтения в открытом файле.
- Seek() — очень похожа на функцию Loc(), но Seek() возвращает информацию о позиции, с которой будет выполняться следующая операция чтения или вставки.
- LOF() — length of file — позволяет определить длину открытого файла в байтах.

- Array() — позволяет автоматически создать массив нужного размера и типа и сразу загрузить в него переданные значения.
- Filter() — позволяет на основе одного массива получить другой, отфильтровав в исходном массиве нужные нам элементы
- LBound() — возвращает информацию о нижней границе массива (то есть номере первого имеющегося в нем значения)
- UBound() — возвращает информацию о верхней границе массива (номер последнего имеющегося значения)
- Join() — возможность слить множество строк из массива строк в одну строковую переменную. В качестве разделителя по умолчанию используется пробел, можно указать свой разделитель.
- Split() — обратная функция, разбивающая строку на массив строк . В качестве разделителя по умолчанию используется пробел, можно указать свой разделитель.

- Choose() — принимает число (номер значения) и несколько значений. Возвращает значение, порядковый номер которого соответствует передаваемому числу, указанному первым аргументом функции. После первого аргумента следуют непосредственно выбираемые значения(максимум 30):
Dim vChs
vChs = Choose(2, "Первый", "Второй", "Третий")
MsgBox vChs, vbInformation
Dim vChs
vChs = Choose(2, "Первый", "Второй", "Третий")
MsgBox vChs, vbInformation
- IIF() — расшифровывается как Immediate IF, то есть "Немедленный IF". Представляет из себя упрощенный вариант IF…Then, когда проверяется условие и возвращается одно из двух значений.
Dim n As Long
n = 12
MsgBox IIf(n > 10, "Больше десяти", "Меньше или равно десяти"), vbInformation
n = 4
MsgBox IIf(n > 10, "Больше десяти", "Меньше или равно десяти"), vbInformation
Dim n As Long
n = 12
MsgBox IIf(n > 10, "Больше десяти", "Меньше или равно десяти"), vbInformation
n = 4
MsgBox IIf(n > 10, "Больше десяти", "Меньше или равно десяти"), vbInformation
- Switch() — принимает неограниченное количество пар типа выражение/значение, проверяет каждое выражения на истинность и возвращает значение для первого выражения, которое оказалось истинным:
Dim sNumber As String, lNumber As Long
lNumber = 2
sNumber = Switch(lNumber = 1, "Один", lNumber = 2, "Два", lNumber = 3, "Три")
MsgBox sNumber, vbInformation
Dim sNumber As String, lNumber As Long
lNumber = 2
sNumber = Switch(lNumber = 1, "Один", lNumber = 2, "Два", lNumber = 3, "Три")
MsgBox sNumber, vbInformation

- Date() — возвращает текущую системную дату. Установить ее можно при помощи одноименного оператора, например, так:
- Time() — возвращает текущее системное время
- Now() — возвращает дату и время вместе.
- DateAdd() — возможность добавить к дате указанное количество лет, кварталов, месяцев и так далее — вплоть до секунд.
- DateDiff() — возможность получить разницу между датами (опять таки в единицах от лет до секунд).
- DatePart() — очень важная функция, которая возвращает указанную часть даты (например, только год, только месяц или только день недели).
- DateSerial() — возможность создать значение даты на основе передаваемых символьных значений.
- DateValue() — делает то же, что и DateSerial(). Отличия — в формате принимаемых значений
- Аналогичным образом (для времени) работают TimeSerial() и TimeValue(), Day(), Year(), Month(), Weekday(), Hour(), Minute(), Second() — специализированные заменители функции
- (), которые возвращают нужную часть даты/времени (которую именно — видно из названия).
- MonthName() — возвращает имя месяца словами по его номеру. Возвращаемое значение зависит от региональных настроек. Если они русские, то вернется русское название месяца.
- Timer() — возвращает количество секунд, прошедших с полуночи.

- ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
- Int(), Fix() и Round() позволяют по разному округлять числа: -Int() возвращает ближайшее меньшее целое, -Fix() отбрасывает дробную часть, -Round() округляет до указанного количества знаков после запятой. Однако Round() может вернуть не совсем ожидаемый результат. Выполните следующую строку кода, чтобы понять, что имеется ввиду:
- Поэтому для округления лучше использовать Format():
MsgBox Format(2.505, "#,##0.00")
MsgBox Format(2.505, "#,##0.00")
- Rnd() и команда Randomize используются для получения случайных значений (очень удобно для генерации имен файлов и в других ситуациях).Перед вызовом функции Rnd() необходимо выполнить команду Randomize для инициализации генератора случайных чисел.
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long
lMinNum = 1: lMaxNum = 100
Randomize
lRundNum = Int(lMinNum + (Rnd() * lMaxNum))
MsgBox lRundNum
Dim lRundNum As Long, lMinNum As Long, lMaxNum As Long
lMinNum = 1: lMaxNum = 100
Randomize
lRundNum = Int(lMinNum + (Rnd() * lMaxNum))
MsgBox lRundNum
- Sgn() — позволяет вернуть информацию о знаке числа. Возвращает 1, если число положительное, -1, если отрицательное и 0, если проверяемое число равно 0.

- ASC() — эта функция позволяет вернуть числовой код для переданного символа. Например, ASC("D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду.Варианты этой функции — AscB() и AscW():
- AscB() — возвращает только первый байт числового кода для символа.
- AscW() — возвращает код для символа в кодировке Unicode
- Chr() — возвращает символ по его числовому коду. Может использоваться в паре с функцией Asc(), но чаще всего её применяют, когда нужно вывести служебный символ (например кавычки — "), т.к. кавычки просто так в VBA-коде не ввести(нужно ставить двойные). Я обычно именно эту функцию и использую.
Dim sWord As String
sWord = Chr(34) & "Слово в кавычках" & Chr(34)
Dim sWord As String
sWord = Chr(34) & "Слово в кавычках" & Chr(34)
Есть варианты этой функции — ChrB() и ChrW(). Работают аналогично таким же вариантам для функции Asc().
- InStr() и InStrRev() — одна из самых популярных функций. Позволяет обнаружить в теле строковой переменной последовательность символов и вернуть ее позицию. Если последовательность не обнаружена, то возвращается 0.
Dim sStr As String
sStr = "w"
If InStr(1, "Hello, Word!", sStr, vbTextCompare) > 0 Then
MsgBox "Искомое слово присутсвует!"
Else
MsgBox "Искомое слово отсутсвует!"
End If
Dim sStr As String
sStr = "w"
If InStr(1, "Hello, Word!", sStr, vbTextCompare) > 0 Then
MsgBox "Искомое слово присутсвует!"
Else
MsgBox "Искомое слово отсутсвует!"
End If
Разница функций в том, что InStr() ищет указанное слово от начала строки, а InStrRev() с конца строки.
- Left(), Right(), Mid() — возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.
- Len() — возможность получить число символов в строке. Часто используется с циклами, операциями замены и т.п.
- LCase() и UCase() — перевести строку в нижний и верхний регистры соответственно. Часто используется для подготовки значения к сравнению, когда при сравнении регистр не важен (фамилии, названия фирм, городов и т.п.).
- LSet() и RSet() — возможность заполнить одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.
- LTrim(), RTrim(), Trim() - возможность убрать пробелы соответственно слева, справа или и слева, и справа.
- Replace() — возможность заменить в строке одну последовательность символов на другую.
- Space() — получить строку из указанного вами количества пробелов;
- Еще одна похожая функция — Spc(), которая используется для форматирования вывода на консоль. Она размножает пробелы с учетом ширины командной строки.
- StrComp() — возможность сравнить две строки.
- StrConv() — возможность преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т.п.).
- StrReverse() — "перевернуть" строку, разместив ее символы в обратном порядке.
- Tab() — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
- String() — позволяет получить строку из указанного количества символов (которые опять-таки указываются Вами). Обычно используются для форматирования вывода совместно с функцией Len().