Архив

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

Прочие функции VBA

Прочие функции VBA

  • DoEvents() — очень важная функция. Она позволяет на время отвлечься от выполнения какой-то операции VBA и передать управление операционной системе, чтобы обработать накопившиеся в операционной системе события (например, нажатия клавиш пользователем). После этого продолжение операции VBA продолжается. Если у Вас работает очень долгая операция (поиск на дисках, обработка большого объема данных и т.п.) и Вы хотите дать пользователю возможность быстро прервать эту операцию, можно выполнять эту команду, например, каждый раз после обработки определенной «порции» данных.
  • Environ() — возвращает абсолютный путь для переменных окружения компьютера (полный список переменных, доступных на Вашем компьютере, можно просмотреть, если в командной строке выполнить команду SET). Например, Вам нужно записать что-то в файл во временном каталоге. Абсолютный путь к временному каталогу на вашем компьютере можно получить так:
    MsgBox Environ("TEMP")
    MsgBox Environ("TEMP")
  • 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() — делает почти то же самое, но вместо имени возвращает числовой код, который обозначает тип данных. Можно использовать для программных проверок типов данных для переменных.
Categories: Tags:

Файловые функции VBA

Файловые функции VBA

  • 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 — позволяет определить длину открытого файла в байтах.

Categories: Tags:

Функции VBA для работы с массивами

Функции VBA для работы с массивами

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

Функции — заменители синтаксических конструкций VBA

Функции - заменители синтаксических конструкций VBA

  • 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
Categories: Tags:

Функции VBA для работы с датой/временем

Функции VBA для работы с датой/временем

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

Функции VBA для работы с числовыми значениями

Функции VBA для работы с числовыми значениями

  • ABS() — эта функция возвращает абсолютное значение переданного ей числа (то же число, но без знака). Например, ABS(3) и ABS(-3) вернут одно и то же значение 3.
  • Int(), Fix() и Round() позволяют по разному округлять числа: -Int() возвращает ближайшее меньшее целое, -Fix() отбрасывает дробную часть, -Round() округляет до указанного количества знаков после запятой. Однако Round() может вернуть не совсем ожидаемый результат. Выполните следующую строку кода, чтобы понять, что имеется ввиду:
        MsgBox Round(2.505, 2)
        MsgBox Round(2.505, 2)
  • Поэтому для округления лучше использовать 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.
Categories: Tags:

Функции VBA для работы с текстом

Функции VBA для работы с текстом

  • 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().
Categories: Tags: