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

  • DoEvents - позволяет передать управление операционной системе, чтобы обработать накопившиеся в операционной системе события (например, нажатия клавиш пользователем). После этого выполнение операции VBA продолжается. Если у Вас работает очень долгая операция (поиск на дисках, обработка большого объема данных и т.п.) и Вы хотите дать пользователю возможность быстро прервать эту операцию, можно выполнять эту команду, например, каждый раз после обработки определенной "порции" данных. Часто применяется именно в циклах, чтобы была возможность прервать цикл, если он "зациклился" или выполняется слишком долго и необходимо выполнить срочную задачу:
    Dim lr As Long
    For lr = 1 To 9999999
        'здесь код по обработке данных
        '...
        'позволяем системе перехватить внешнее событие и отреагировать на него
        DoEvents
    Next
  • Environ - возвращает абсолютный путь для переменных окружения компьютера (полный список переменных, доступных на конкретном компьютере, можно просмотреть, если в командной строке выполнить команду SET). Например, если нужно сохранить некий файл во временном каталоге(папка Temp), то получить полный путь к ней можно так:
    MsgBox Environ("TEMP")
  • Функции работы с реестром
  • SaveSetting - позволяет записать информацию в реестр. Информация храниться исключительно в текстовом виде.
  • GetSetting - позволяет получить значение, сохраненное ранее при помощи SaveSetting
  • DeleteSetting - удаляет из реестра информацию, сохраненную в нем ранее при помощи SaveSetting
  • Все три функции(SaveSetting, DeleteSetting, GetSetting) записывают или изменяют/получают информацию в специально отведенной ветке реестра и имеют 3-и одинаковых параметра:
    • AppName - произвольное значение. Можно считать, что это имя основного контейнера(или диска) для хранения информации(часто используется имя файла или программы)
    • Section - произвольное значение. Можно считать, что это имя папки внутри контейнера(диска). Для одного AppName можно создать несколько Section
    • Key - практически конечная точка. Можно считать, что это текстовый файл в конечной папке, в который и будет хранить нужное значение.
    • Для SaveSetting и GetSetting есть еще и четвертый параметр.
      У SaveSetting это Setting - непосредственно то значение, которое необходимо сохранить в реестре для Key и которое затем хотим оттуда извлекать.
      А у GetSetting это Default - его указывать не обязательно. Это то значение, которое функция должна вернуть, если по указанному пути в Key нет значения(или нет самого Key или раздела).

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

    Dim vreg_val As Long 'счетчик запуском
    'пробуем получить значение по указанным параметрам. Если его там нет - возвращаем 0
    vreg_val = GetSetting("MyVariables", "File1", "Module1", 0)
    'Проверяем кол-во запусков
    If vreg_val > 100 Then
        MsgBox "Пробное количество запусков закончилось!", vbInformation, "www.excel-vba.ru"
        End 'завершаем все процедуры и функции кода
    End If
    'Увеличиваем счетчик запусков
    vreg_val = vreg_val + 1
    'Сохраняем увеличенный счетчик кол-ва запусков - произойдет только в случае, если кол-во запусков менее 100
    SaveSetting "MyVariables", "File1", "Module1", vreg_val
    'если хотим удалить сохраненные настройки
    DeleteSetting "MyVariables", "File1", "Module1"

    В случае с удалением настроек при помощи DeleteSetting важно знать, что обязательный к указанию параметр - только первый - AppName. Если указан только он, то он будет удален полностью и все его "папки" будут так же удалены. Если указать только AppName и Section - будут удалены только данные Section. Ну и если указать только Key - удален будет только он. Иначе говоря - по принципу вложенных папок и файлов в системе. Удалили папку - удалили и все, что в ней было.

  • GetAllSettings - возвращает двухмерный массив параметров из реестра, которые были заданы пользователем ранее при помощи функции SaveSetting. При этом обязательно указываются AppName и Section, а в массиве содержится два столбца: 1-ый - имя Key, второй - его значение:
    Dim aAllKeys
    aAllKeys = GetAllSettings("MyVariables", "File1")
  • Важно! Эти методы позволяют обращаться только к одному очень далекому уголку реестра в ветви HKEY_CURRENT_USERS. Обращаться к другим параметрам реестра при помощи этих методов бесполезно. Для работы с реестром лучше использовать объект WSHShell из библиотеки Windows Script Host Object Model, которая сейчас есть на любом компьютере "из коробки". У данного объекта есть специальные методы для работы с реестром - 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 внешний файл. Обычно используется для быстрого открытия файла в приложении, назначенном по умолчанию для его открытия. По сути это единственная возможность данной функции - никак управлять запущенным файлом или приложением не получится.

    Если нужны чуть более расширенные возможности по запуску других файлов - имеет смысл присмотреться к WshShell и WshExec из библиотеки Windows Script Host Object Model. В них можно передавать в окно клавиатурные комбинации, принимать и передавать значения через командную строку и т.п. Эта библиотека есть на любом компьютере Windows.

  • TypeName - функция, которая возвращает имя типа данных для переданной ей переменной. Очень удобна для определения типа данных для значения внутри функций или если в момент запуска выделен должен быть конкретный тип данных. Например, если наш код предполагает обработку выделенных на листе ячеек, то не лишним будет проверять - точно ли выделены ячейки или нет. Ведь помимо ячеек на листе можно выделить и фигуру и диаграмму. И тогда код выдаст ошибку. И чтобы этого не было - проверяем тип:
    If TypeName(Selection) <> "Range" Then
        MsgBox "Необходимо выделить ячейки!", vbCritical, "www.excel-vba.ru"
        Exit Sub
    End If
  • VarType - делает почти то же самое, что TypeName, но вместо имени возвращает числовой код, который обозначает тип данных. Можно использовать для программных проверок типов данных для переменных. Например, если мы при помощи Application.GetOpenFilename запрашиваем путь к файлу - можно проверить, нажата кнопка Отмена или файл был выбран:
    Dim sfile 'обязательно объявляем без типа
    sfile = Application.GetOpenFilename("Файлы Excel(*.xlsx*),*.xlsx", , "Выберите файл Excel", , False)
    'если sfile имеет тип Boolean(TRUE или FALSE)- значит была нажата кнопка Отмена
    If VarType(sfile) <> vbBoolean Then
        GetFileFullName = sfile
    End If

Loading